簡體   English   中英

為什么Object.keys()和...在不同的?

[英]Why are Object.keys() and for … in different?

我正在嘗試做一些瀏覽器對象發現,搞清楚瀏覽器內置等...

當我試圖獲取窗口對象的屬性時,我注意到了不同的結果(僅供參考,我使用的是Chrome版本41.0.2272.89(64位))。

Object.keys(window).length;

返回7個鍵。 從文檔Object.keys()返回對象的可枚舉屬性。

但是文檔也說for ... in迭代對象的可枚舉屬性時。 然而:

    var i = 0;
    for (var propertyName in window) {
        i++;
    }

返回177的計數。

為什么會有所不同? 他們不應該只返回可枚舉屬性的數量嗎?

for-in了對象自己的枚舉的屬性循環它的原型(和它的原型等)的枚舉的屬性。 Object.keys僅列出對象自己的可枚舉屬性。

所以Object.keys建立一個數組這樣

var keys = [];
var key;
for (key in object) {
    if (object.hasOwnProperty(key)) { // But using an internal, non-overrideable
                                      // operation, not literally the method
        keys.push(key);
    }
}

注意hasOwnProperty檢查(它實際上不是對方法的調用,它是一個內部檢查,不能通過替換方法或類似方法來欺騙)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM