2012-08-28 14 views
7

Estoy trabajando en un ejercicio codecademy.com donde usamos declaraciones for-in para recorrer un objeto e imprimir hello en diferentes idiomas comprobando si los valores de las propiedades en los idiomas objeto son cadenas usando typeofJavaScript: using typeof para verificar si string

mi comprobación para ver si el valor es una cadena no está funcionando. mis bucles que me dan este resultado

english 
french 
notALanguage 
spanish 

El código

var languages = { 
     english: "Hello!", 
     french: "Bonjour!", 
     notALanguage: 4, 
     spanish: "Hola!" 
    }; 

    // print hello in the 3 different languages 
    for(var hello in languages){ 
     var value = hello; 
     if (typeof value === "string"){ 
     console.log(value); 
     } 
    } 

Estas son las instrucciones para el ejercicio

Los objetos no son tan extraño si realmente piensa acerca de ello!

Recuerde que puede averiguar el tipo de variable utilizando typeof myVariable. Los tipos que nos preocupan por el momento son "objeto", "cadena" y "número".

Recall el para-en bucle:

for (var x en obj) {executeSomething(); }

Esto recorrerá todas las propiedades de obj una por una y asignará el nombre de propiedad a x en cada ejecución del ciclo.

Combinemos nuestro conocimiento de estos dos conceptos.

Examine el objeto de idiomas. Tres propiedades son cadenas, mientras que uno es un número.

Utilice un bucle for-in para imprimir las tres formas de decir hola. En el bucle , debe verificar si el valor de la propiedad es una cadena para que no imprima accidentalmente un número.

+2

Y la pregunta es ... – zerkms

+2

es posible hacer una pregunta sin usar un signo de interrogación (?) Y sin usar la sintaxis típica de una pregunta. El OP mostró cuál era mi problema, y ​​dos personas que respondieron (y todas las personas que votaron en contra) lo entendieron claramente. – Leahcim

+1

sí, ha dado el código y la salida obvia correspondiente. Es una buena idea decir cuál fue * tu * expectativa, ya que el código funciona perfectamente válido. – zerkms

Respuesta

15

Eso es porque está comprobando el key del objeto. Para verificar el valor real, debe hacer algo como object[key]. Intente esto:

var languages = { 
     english: "Hello!", 
     french: "Bonjour!", 
     notALanguage: 4, 
     spanish: "Hola!" 
    }; 

// print hello in the 3 different languages 
for(var hello in languages){ 
    var value = languages[hello]; 
    if (typeof value === "string"){ 
    console.log(value); 
    } 
} 
1

Está comprobando las claves del objeto, no el valor. Por lo general, es una buena práctica consultar al constructor de un objeto para determinar su tipo.

Algo como esto:

var languages = { 
    english: "Hello!", 
    french: "Bonjour!", 
    notALanguage: 4, 
    spanish: "Hola!" 
}; 

for(i in languages) { 

    if(languages[i].constructor === String) { 
    console.log(languages[i]) 
    }; 

}; 
2

Aquí está la respuesta: (uso typeof y luego el nombre del objeto seguido por el var en su instrucción for y la prueba si es igual a "cadena")

var languages = { 
    english: "Hello!", 
    french: "Bonjour!", 
    notALanguage: 4, 
    spanish: "Hola!" 
}; 

// print hello in the 3 different languages 
for (var x in languages){ 
    if (typeof languages[x] === "string"){ 
     console.log(languages[x]); 
    } 
    else ; 
} 
0

La siguiente codificación también es útil para realizar solo el valor de la cadena. Al usar la variable para acceder a la lista de propiedades de abject después de eso, al usarla, compruebe que el valor sea NotAnúmero mediante isNaN.El código que figura a continuación es útil para usted

var languages = { 
english: "Hello!", 
french: "Bonjour!", 
notALanguage: 4, 
spanish: "Hola!" 
}; 

// print hello in the 3 different languages 
for(a in languages) 
{ 
if(isNaN(languages[a])) 
console.log(languages[a]); 
} 
0

este es el valor en el que funciona para mí

for (var x en lenguajes) {

if(typeof languages[x] === "string"){ 
    console.log(languages[x]); 
} else } 
Cuestiones relacionadas