2012-03-02 94 views
2
var result = function(){} 
console.log("constructor" in result);//true 
console.log("__proto__" in result);//true 
console.log("prototype" in result);//true 

for (var prop in result) { 
    console.log(prop); // no output!! 
} 

當我用in來確定結果中的if屬性時,它返回true;但是當我使用for-in時,結果中沒有屬性,爲什麼?for-in和in中的代碼

+0

它的工作對我來說 – mgraph 2012-03-02 09:04:18

回答

7

裁判:https://developer.mozilla.org/en/JavaScript/Reference/Statements/for...in

一種... in循環不隨非枚舉的屬性進行迭代。 從內置構造函數(如Array和Object)創建的對象具有 從Object.prototype繼承的不可枚舉屬性和 String.prototype不可枚舉,如String的indexOf 方法或Object的toString方法。循環將遍歷對象的所有 可枚舉屬性或從構造函數的基本類型(包括覆蓋內置的 屬性的任何內容)繼承的對象。

1

有些屬性是枚舉類型,有些屬性不是,所以你不會在for-in循環中看到它們。

4

這是因爲for...in只能遍歷可枚舉的其目標的屬性。可枚舉性是屬性可能具有或可能不具有的屬性(以及可寫性和可配置性);那些沒有它的將不會被for...in曝光,儘管它們當然仍然存在於物體上。

MDN說,這對for...in

一種... in循環不隨非枚舉的屬性進行迭代。 從內置構造函數(如Array和Object)創建的對象具有 從Object.prototype繼承的不可枚舉屬性和 String.prototype不可枚舉,如String的indexOf 方法或Object的toString方法。循環將遍歷對象的所有 可枚舉屬性或從構造函數的基本類型(包括覆蓋內置的 屬性的任何內容)繼承的對象。

在另一方面,in沒有考慮enumerability考慮,如果存在屬性,而不進一步審議,以便返回true

0

for (var prop in result) { 
    console.log(result[prop]); // no output!! 
} 

for..in不itererate他們的方式,你的期望。 prop是索引,並且循環爲result中的每個元素運行。

它是一樣的 for(var i =0;i<result.length;i++)

0

爲...在僅僅只有枚舉對象成員