Javascript区分对象中的函数

Javascript区分对象中的函数,javascript,object,typeof,Javascript,Object,Typeof,有这样一个物体: var a = { b: "string", c: function(){ return "i return a string"; } } 做 返回“string”,“string”,因为b是字符串,c返回字符串 是否有返回c->function的函数?如果要查看属性的类型而不是其键,应将该值与typeof运算符一起使用 for (var key in a) { console.log(typeof a[key] ); }; 基本上,

有这样一个物体:

var a = {

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

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


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

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

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

基本上,通过对象的键进行迭代,始终可以得到字符串,因为它们是这样表示的

但是,如果您执行
console.log(键入一个[key])然后您将获得预期的输出。

更改为:

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

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

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

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

相反,列举价值观本身

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

让我来解释一下,这样大家都很容易理解。(无论如何,这是我在这里的第一篇帖子。)

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

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

我认为最好避免使用eval,而是使用[钥匙],无论如何,谢谢!
console.log(typeof(a[key]));
console.log(typeof(eval('a.'+ key)));