2011-05-26 79 views
3

我是很新的JavaScript,因此我對下面的語法困惑:如果typeOf obj=="function"當obj是函數時,「obj中的鍵」?

isFunction方法將返回true。但是當你說key in obj時,obj是一個函數呢?

+0

提示:在聲明變量時使用'var'關鍵字,否則它們將在全局範圍內結束。例如:'for(var key in obj)'或者在函數頂部聲明變量.. – some 2011-05-26 04:03:58

回答

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 
    } 
} 
+1

+1記住使用'var',這樣'key'不會在全局範圍內結束一個函數。 – some 2011-05-26 03:58:49

4

JavaScript函數也是對象,這意味着它們可以具有屬性。你可以做這樣的事情:

var f = function() {}; 
f.a = "foo"; 
f.b = "bar"; 

如果objf,那麼for環路將與key"a""b"迭代。

基本上,for in循環遍歷一個對象的所有屬性,除了內部標記爲不可枚舉(主要是內置的方法和屬性)外。

1

功能也可以有屬性, - 下面的代碼是有效的:

var foo = function() { } 
foo.prop1 = 1; 
foo.prop2 = "hello"; 

for (key in obj)循環會枚舉PROP1和PROP2。

相關問題