我是JavaScript新手,所以我对以下语法感到困惑:
if (isFunction(obj)){
for (key in obj) {
//do something
}
}
如果isFunction
,typeOf obj=="function"
方法将返回true。但是当key in obj
是函数时,obj
会发生什么?
答案 0 :(得分:4)
JavaScript函数也是对象,这意味着它们可以具有属性。你可以这样做:
var f = function () {};
f.a = "foo";
f.b = "bar";
如果obj
为f
,那么for
循环将以key
"a"
和"b"
进行迭代。
基本上,for in
循环遍历对象的所有属性,除了那些内部标记为不可枚举的属性(主要是内置方法和属性)。
答案 1 :(得分:4)
for..in
循环遍历obj
的可枚举属性。函数是对象,它们具有自己的属性以及来自[[prototype]]链的继承属性。见ECMA-262§12.6.4。
另外,不要忘记声明应保留在本地的变量。
要仅解决obj
上的可枚举属性而不是其继承的可枚举属性,通常包含 hasOwnProperty 测试:
for (var key in obj) {
if (obj.hasOwnProperty(key)) {
// key is enumerable property of obj, not inherited
}
}
答案 2 :(得分:1)
函数也可以具有属性, - 以下代码有效:
var foo = function() { }
foo.prop1 = 1;
foo.prop2 = "hello";
for (key in obj)
循环将枚举prop1和prop2。
答案 3 :(得分:1)
这是一个jsfiddle(不确定这是否有帮助)http://jsfiddle.net/FEAzV/