Javascript区分对象中的函数
Javascript distinguish a function in an object
有一个这样的对象:
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)));
相关文章:
- 在javascript中调用函数/对象引用时,可容纳任何数据类型
- 访问函数对象的上下文属性|如何
- 为什么可以'我们在函数体中为函数对象添加属性,就像在javascript中为对象文字添加属性一样
- 如何将函数对象从javascript传递到Polymer元素
- 为什么函数对象的实例没有继承函数原型属性
- 为什么我会从 JavaScript 函数返回一个命名函数(对象)
- 为什么实例构造函数指向最上面的函数构造函数对象
- 使用object.freeze()扩展函数对象-can't添加字段
- 为什么'这'与函数对象一起使用时会有不同的处理方式
- setTimeout()/setInterval()赢得't执行**我正在传递函数对象,而不是执行函数
- 为什么茉莉花间谍不't通过引用解析函数对象
- 在 mongo map 中调用外部 javascript 函数(对象)或减少上下文的可能方法
- 在 JavaScript 中为函数对象添加别名
- 在 Express JS 中从路由调用函数对象
- 函数对象的名称属性是什么
- 构造函数对象
- 节点.js - 从另一个函数/对象发出事件
- 声明函数是否会创建具有函数名称和分配给它的函数对象的变量
- 函数对象__proto__和原型属性
- 类仿真 - 模块模式与函数对象