Javascript区分对象中的函数

Javascript distinguish a function in an object

本文关键字:函数 对象 Javascript      更新时间:2023-09-26

有一个这样的对象:

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

行为

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

返回"字符串","字符串",因为 b 是字符串,c 返回字符串。

有没有返回 c -> 函数的函数?

返回"字符串","字符串",因为 b 是字符串,c 返回字符串。

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

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

相反,枚举值本身;

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

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

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

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

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

更改为:

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.

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

尝试以下代码,它说它是一个函数

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