2012-08-28 12 views
7

sto lavorando su un esercizio di codecademy.com dove usiamo per-nelle istruzioni per ciclo attraverso un oggetto e stampare ciao in diverse lingue controllando per vedere se i valori delle proprietà in i linguaggi object sono stringhe utilizzando typeofJavaScript: usando typeof per verificare se la stringa

mio check per vedere se il valore è una stringa non sta funzionando. i miei cicli dandomi questo risultato

english 
french 
notALanguage 
spanish 

Il codice

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); 
     } 
    } 

Queste sono le istruzioni per l'esercizio

Gli oggetti non sono così straniera se davvero pensate!

Ricordati che puoi capire il tipo di una variabile utilizzando typeof myVariable. I tipi di cui ci occupiamo per ora sono "oggetto", "stringa" e "numero".

Recall per-in loop:

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

Questo passerà attraverso tutte le proprietà obj uno per uno e assegnare il nome della proprietà per x su ogni esecuzione del ciclo.

Uniamo la nostra conoscenza di questi due concetti.

Esaminare l'oggetto lingue. Tre proprietà sono stringhe, mentre una è un numero.

Utilizzare un ciclo for-in per stampare i tre modi per dire ciao. Nel ciclo , è necessario verificare se il valore della proprietà è una stringa, pertanto non è possibile stampare un numero con .

+2

E la domanda è ... – zerkms

+2

è possibile porre una domanda senza usare un punto interrogativo (?) E senza usare la sintassi tipica di una domanda. L'OP ha mostrato quale fosse il mio problema e due persone che hanno risposto (e tutte le persone che hanno upvoted) l'hanno capito chiaramente. – Leahcim

+1

sì, hai dato il codice e l'output ovvio corrispondente. È una buona idea dire quale sia * la tua * aspettativa, dal momento che il codice funziona perfettamente. – zerkms

risposta

15

Ecco perché stai controllando lo key dell'oggetto. Per verificare il valore effettivo, dovresti fare qualcosa come object[key]. Prova questo:

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

Si stanno verificando le chiavi dell'oggetto, non il valore. Di solito è una buona pratica verificare con il costruttore di un oggetto per determinarne il tipo.

Qualcosa di simile a questo:

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

for(i in languages) { 

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

}; 
2

Ecco la risposta: (uso typeof e poi il nome dell'oggetto seguito dalla var nella vostra per dichiarazione e verificare se è uguale a "stringa")

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 codifica sotto è anche utile per eseguire solo stringa value.By utilizzando variabile per accedere all'elenco proprietà di degradante dopo che utilizzandolo controllare il valore è un NotANumber utilizzando isNaN.Il codice indicato di seguito è utile a voi

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

questo è il per di valore a lavorare per me

for (var x in lingue) {

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