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
把任意多個的源對象自身的可枚舉屬性拷貝給目標對象惩妇,然后返回目標對象株汉。