2

有这样的对象:

var a = {

  b: "string",
  c: function(){
    return "i return a string"; 
  }    
}

正在做

for (var key in a) {
    console.log(typeof key);
};

返回“string”、“string”,因为 b 是一个字符串,而 c 返回一个字符串。

是否有返回 c -> 函数的函数?

4

5 回答 5

3

如果要查看属性的类型而不是其键,应将值与typeof运算符一起使用。

for (var key in a) {
    console.log(typeof a[key] );
};
于 2012-06-20T09:27:31.473 回答
3

返回“string”、“string”,因为 b 是一个字符串,而 c 返回一个字符串。

没有。它返回的原因string,是属性名b和属性名c都是字符串;您现在正在迭代对象的键,而不是它们的值。

你可以引入 attribute d,这是一个返回数字或布尔值的函数,你仍然会得到string.

相反,枚举值本身;

for (var x in a) {
    console.log(typeof a[x] );
};
于 2012-06-20T09:29:11.850 回答
2

基本上,您将始终通过遍历对象的键来获取字符串,因为它们是这样表示的。

但是,例如,如果您这样做, console.log(typeof a[key]);那么您将获得预期的输出。

于 2012-06-20T09:28:07.040 回答
1

改成:

for (var key in a) {
    console.log(typeof a[key]);
};​

现场演示

console.log(typeof key); // gives you the key - "c"
console.log(typeof a[key]); // gives you the value of the "c" key - function.
于 2012-06-20T09:29:10.800 回答
1

让我稍微解释一下,这样任何人都很容易理解。(无论如何,这是我在这里的第一篇文章。)

试试下面的代码,它说它是一个函数

console.log(typeof(a.c))

但是您所写的是读取属性名称。请尝试以下代码以了解您的代码有什么问题。

for (var key in a) {
    console.log(key);
};

所以基本上你得到的是正确的。因为所有属性名称都是字符串。请记住 JSON 对象有几个限制,例如区分大小写、遍历属性所需的完整路径等。

如下更改您的代码以获取您的属性的类型,

解决方案1:

console.log(typeof(a[key]));

解决方案2:

console.log(typeof(eval('a.'+ key)));
于 2012-06-20T09:56:11.147 回答