for/in、Object.keys()、Object.getOwnPropertyNames()

for/in:

是ES3中的方法,用來遍歷對象(集合)的方法;

不過,for/in 會輸出自身以及原型鏈上可枚舉的屬性,可以使用 hasOwnProperty 來過濾原型鏈上的屬性

Object.keys():

是ES5中方法,用來獲取對象自身可枚舉的屬性鍵

原型中屬性和設(shè)置了不可枚舉的屬性,都獲取不到

效果類似 for in+hasOwnProperty

Object.getOwnPropertyNames()

是ES5中方法,用來獲取對象自身的全部屬性名

不論自身對象是否設(shè)置了可枚舉,都可以獲取到

擴展:這邊借鑒別人總結(jié)的對象的屬性和方法

(1) Object.create

創(chuàng)建一個擁有指定原型和若干個指定屬性的對象
Object.create(Object.prototype, {
    a: {
        value: 1,
        writable: true,
        configurable: true
    }
})

(2) Object.defineProperty

直接在一個對象上定義一個新屬性,或者修改一個已經(jīng)存在的屬性, 并返回這個對象。
Object.defineProperty(obj, 'key', {
    enumerable: false,   // 能否被枚舉
    configurable: false, // 能否被改變
    writable: false,     // 能否可寫
    value: 'static'
})

(3) Object.defineProperties

在一個對象上添加或修改一個或者多個自有屬性,并返回該對象。
var obj = {};
Object.defineProperties(obj, {
    'property1': {
        value: true,
        writable: true
    },
    'property2': {
        value: 'hello',
        writable: false     
    }
})

(4) Object.getPrototypeOf

返回指定對象的原型(也就是該對象內(nèi)部屬性[Prototype]的值)
Object.getPrototypeOf({}) === Object.prototype

ES5之前,要達到上面同樣的方法,只能使用 constructor

(5) Object.keys

Object.keys() 方法會返回一個由給定對象的所有可枚舉自身屬性的屬性名組成的數(shù)組,數(shù)組中屬性名的排列順序和使用for-in循環(huán)遍歷該對象時返回的順序一致(兩者的主要區(qū)別是 for-in 還會遍歷出一個對象從其原型鏈上繼承到的可枚舉屬性)

(6) Object.getOwnPropertyNames

Object.getOwnPropertyNames()方法返回一個由指定對象的所有自身屬性的屬性名(包括不可枚舉屬性)組成的數(shù)組。

其和Object.keys的區(qū)別就是能夠獲取自身的全部屬性,包括不可枚舉屬性。

(7) Object.preventExtensions

讓一個對象變的不可擴展,也就是永遠不能再添加新的屬性。
Object.preventExtensions(obj)

(8) Object.isExtensible

判斷一個對象是否是可擴展的(是否可以在它上面添加新的屬性)。

(9) Object.seal

讓一個對象密封,并返回被密封后的對象
密封對象是指那些不能添加新的屬性,不能刪除已有屬性,以及不能修改已有屬性的可枚舉性、可配置性、可寫性,但可能可以修改已有屬性的值的對象。

(10) Object.isSealed

判斷一個對象是否是密封的(sealed)。

(11)Object.freeze

凍結(jié)一個對象。凍結(jié)對象是指那些不能添加新的屬性,不能修改已有屬性的值,不能刪除已有屬性,以及不能修改已有屬性的可枚舉性、可配置性、可寫性的對象。也就是說,這個對象永遠是不可變的。該方法返回被凍結(jié)的對象。

(12)Object.isFrozen

Object.isFrozen() 方法判斷一個對象是否被凍結(jié)(frozen)

(13) Object.assign

把任意多個的源對象自身的可枚舉屬性拷貝給目標(biāo)對象,然后返回目標(biāo)對象。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容