[英]Why is Object.keys([,1,,1]) different from Object.keys([,1,undefined,1])?
[英]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.