我是很新的JavaScript,因此我對下面的語法困惑:如果typeOf obj=="function"
當obj是函數時,「obj中的鍵」?
的isFunction
方法將返回true。但是當你說key in obj
時,obj
是一個函數呢?
我是很新的JavaScript,因此我對下面的語法困惑:如果typeOf obj=="function"
當obj是函數時,「obj中的鍵」?
的isFunction
方法將返回true。但是當你說key in obj
時,obj
是一個函數呢?
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
}
}
+1記住使用'var',這樣'key'不會在全局範圍內結束一個函數。 – some 2011-05-26 03:58:49
JavaScript函數也是對象,這意味着它們可以具有屬性。你可以做這樣的事情:
var f = function() {};
f.a = "foo";
f.b = "bar";
如果obj
是f
,那麼for
環路將與key
是"a"
和"b"
迭代。
基本上,for in
循環遍歷一個對象的所有屬性,除了內部標記爲不可枚舉(主要是內置的方法和屬性)外。
功能也可以有屬性, - 下面的代碼是有效的:
var foo = function() { }
foo.prop1 = 1;
foo.prop2 = "hello";
的for (key in obj)
循環會枚舉PROP1和PROP2。
這裏有一個的jsfiddle(不知道這是否有助於)http://jsfiddle.net/FEAzV/
提示:在聲明變量時使用'var'關鍵字,否則它們將在全局範圍內結束。例如:'for(var key in obj)'或者在函數頂部聲明變量.. – some 2011-05-26 04:03:58