Javascript区分对象中的函数

时间:2012-06-20 09:25:58

标签: javascript object typeof

拥有这样的对象:

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 - >的功能;功能

5 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:3)

  

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

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

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

相反,枚举值本身;

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

答案 2 :(得分:2)

基本上,您将始终通过通过对象迭代来获得字符串,因为它们就是这样表示的。

但是如果你做例如console.log(typeof a[key]);那么你将得到预期的输出。

答案 3 :(得分:1)

更改为:

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

Live DEMO

console.log(typeof key); // gives you the key - "c"
console.log(typeof a[key]); // gives you the value of the "c" key - function.

答案 4 :(得分: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)));