Javascript 對象那些事(持續更新)

一 前言

記錄javascript語言object類型的一些問題。javascript

1. typeof []; // object
   2. typeof {};// object
   3. typeof null; //object

這裏講的是第二種狀況。java

二 正文

1.for...in 會遍歷原型鏈上的屬性

class Super{
    constructor(val){
        this.value=val;
    }
};

const suber = {
    value:'suber'
};

suber.prototype = new Super('super');

for(attr in suber){
    const val = suber[attr]
    console.log('attr-val=>',attr,val); //attr-val=> value suber   attr-val=> prototype Super {value: "super"}
}

這個問題不少人都應該知道。解決的辦法也不少:
1) 使用hasOwnProperty(attr) 來取自有屬性的值
2) 使用Object.keys(object) 來取得全部的自有屬性key,而後object[key]來取得value數組

2.for...in 遍歷的順序不能保證

Properties order in objects is not guaranteed in JavaScript; you need to use an Array.瀏覽器

for...in 遍歷的順序是按道理來說是按照出現的前後順序,可是各家瀏覽器遍歷順序有所不一樣。this

Chrome Opera 中使用 for-in 語句遍歷對象屬性時會遵循一個規律,它們會先提取全部 key 的 parseFloat 值爲非負整數的屬性, 而後根據數字順序對屬性排序首先遍歷出來,而後按照對象定義的順序遍歷餘下的全部屬性。其它瀏覽器則徹底按照對象定義的順序遍歷屬性。prototype

因此,順序這種事,仍是要用數組來保證。code

詳細請參考:JS對象遍歷順序對象

三 後記

參考連接:JS對象遍歷順序排序

相關文章
相關標籤/搜索