13

我正在做一个 codecademy.com 练习,我们使用 for-in 语句循环对象并通过检查语言对象中的属性值是否是字符串来以不同的语言打印 hellotypeof

我检查该值是否为字符串不起作用。我的循环给了我这个结果

english
french
notALanguage
spanish

编码

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

这些是练习的说明

如果你仔细想想,物体并不是那么陌生!

请记住,您可以使用 typeof myVariable 确定变量的类型。我们现在关心的类型是“object”、“string”和“number”。

回想一下 for-in 循环:

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

这将一一遍历 obj 的所有属性,并在每次循环运行时将属性名称分配给 x。

让我们结合我们对这两个概念的了解。

检查语言对象。三个属性是字符串,而一个是数字。

使用 for-in 循环打印出三种打招呼方式。在循环中,您应该检查属性值是否为字符串,以免意外打印数字。

4

6 回答 6

34

那是因为您正在检查key对象的 。要检查实际值,您应该执行类似object[key]. 尝试这个:

 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); 
    }
}
于 2012-08-28T04:15:44.163 回答
4

这是答案:(使用 typeof ,然后在你的 for 语句中使用对象名称后跟 var 并测试它是否等于“string”)

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 ;
}
于 2013-08-11T03:33:31.680 回答
1

您正在检查对象的键,而不是值。检查对象的构造函数以确定其类型通常是一种好习惯。

像这样的东西:

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

for(i in languages) {

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

};
于 2012-08-28T06:25:04.147 回答
1

“字符串”与字符串不同。我找到了一种测试 typeof 字符串的方法。

if (typeof something === typeof "test") ...

您当然可以使用“字符串”进行比较,但任何实际的字符串都可以。

于 2018-10-03T12:59:53.650 回答
0

下面的编码对于仅执行字符串值也很有用。通过使用变量访问 abject 的属性列表,然后使用它检查值是否为 NotANumber 使用 isNaN。下面给出的代码对您有用

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]);
}
于 2014-06-24T05:10:15.797 回答
0

这是为我工作的价值

for(语言中的var x){

if(typeof languages[x] === "string"){
    console.log(languages[x]);
} else }
于 2015-08-30T04:52:40.607 回答