1.Object.constructor
? ? 返回創(chuàng)建實(shí)例對象的Object構(gòu)造函數(shù)的引用注意炼吴,此屬性的值是對函數(shù)本身的引用,而不是一個包含函數(shù)名稱的字符串
varo={}; o.constructor===Object;//true
var o=new Object;o.constructor===Object;// true
function Tree(name){
????this.name=name;
}
var? theTree=newTree("Redwood");
console.log("theTree.constructor is "+theTree.constructor);
結(jié)果:
theTree.constructor is functionTree(name){this.name=name;}
2.Object.assign(target, ...sources)
? ??用于將所有可枚舉屬性的值從一個或多個源對象復(fù)制到目標(biāo)對象疫衩。它將返回目標(biāo)對象硅蹦。(將sources 的屬性賦予給target,??只會拷貝源對象自身的并且可枚舉的屬性到目標(biāo)對象??)
var obj = Object.create({foo: 1}, { // foo 是個繼承屬性。
? ? bar: {
? ? ? ? value: 2? // bar 是個不可枚舉屬性闷煤。
? ? },
? ? baz: {
? ? ? ? value: 3,
? ? ? ? enumerable: true? // baz 是個自身可枚舉屬性童芹。
? ? }
});
var copy = Object.assign({}, obj);
console.log(copy); // { baz: 3 }
var v1 = "abc";
var v2 = true;
var v3 = 10;
var v4 = Symbol("foo")
var obj = Object.assign({}, v1, null, v2, undefined, v3, v4);
// 原始類型會被包裝,null 和 undefined 會被忽略鲤拿。
// 注意假褪,只有字符串的包裝對象(數(shù)組也可以)才可能有自身可枚舉屬性。
console.log(obj); // { "0": "a", "1": "b", "2": "c" }
3.Object.create(proto, [propertiesObject])
用來創(chuàng)建一個新的對象近顷,使用現(xiàn)在的對象來提供新創(chuàng)建的對象的——propto_? ??
如果propertiesObject沒有指定為 undefined生音,則是要添加到新創(chuàng)建對象的可枚舉屬性(即其自身定義的屬性,而不是其原型鏈上的枚舉屬性)對象的屬性描述符以及相應(yīng)的屬性名稱窒升。這些屬性對應(yīng)Object.defineProperties()的第二個參數(shù)
4.Object.defineProperties(obj,?props)與Object.defineProperty(obj,?'key', descriptor)
直接在一個對象上定義新的屬性或修改現(xiàn)有屬性缀遍,并返回該對象。數(shù)據(jù)屬性有4個描述內(nèi)部屬性的特性
[[Configurable]]
表示能否通過delete刪除此屬性饱须,能否修改屬性的特性域醇,或能否修改把屬性修改為訪問器屬性,如果直接使用字面量定義對象,默認(rèn)值為true
[[Enumerable]]
表示該屬性是否可枚舉譬挚,即是否通過for-in循環(huán)或Object.keys()返回屬性锅铅,如果直接使用字面量定義對象,默認(rèn)值為true
[[Writable]]
能否修改屬性的值殴瘦,如果直接使用字面量定義對象狠角,默認(rèn)值為true
[[Value]]
該屬性對應(yīng)的值,默認(rèn)為undefined
5.?Object.entries()
該方法返回一個給定對象自身可枚舉屬性的鍵值對數(shù)組蚪腋,其排列與使用for...in循環(huán)遍歷該對象時返回的順序一致(區(qū)別在于 for-in 循環(huán)也枚舉原型鏈中的屬性
constobj={foo:'bar',baz:42};
console.log(Object.entries(obj));// [ ['foo', 'bar'], ['baz', 42]?
6.Object.fromEntries(現(xiàn)在大部分瀏覽器不支持丰歌,火狐63支持)
把鍵值對列表轉(zhuǎn)換為一個對象
const map=newMap([['foo','bar'],['baz',42]]);
const obj=Object.fromEntries(map);
console.log(obj);// { foo: "bar", baz: 42 }
7.hasOwnProperty()方法會返回一個布爾值????? ? ? ??
主要用來判斷對象自身屬性中是否具有指定的屬性 ,該方法會忽略那些從原型鏈上繼續(xù)到的屬性? ? ??? ? ? ??
var? obj={};? ? ? ? obj.hasOwnProperty('cc')與Object.proptotype.hasOwnProperty('cc')效果是一樣的屉凯,都是用來判斷obj是否含有屬性cc立帖,但是后者會去掉因?yàn)閛bj有hasOwnProperty而出現(xiàn)錯誤情況?
8.Object.getOwnPropertyDescriptor(obj, prop) 與Object.getOwnPropertyDescriptors(obj)
? ??返回指定對象上一個自有屬性對應(yīng)的屬性描述符,獲取當(dāng)前的某個屬性是否可以修改悠砚,枚舉晓勇,刪除等
? ??o={bar:42};
????d=Object.getOwnPropertyDescriptor(o,"bar");
????// d {
????// configurable: true,//是否可通過delete刪除此屬性,能否修改屬性的特性
????// enumerable: true,//是否可以枚舉獲裙嗑伞(for-in循環(huán)或Object.keys()返回屬性)
????// value: 42,
????// writable: true,//是否可以修改
????// }
9.Object.getOwnPropertyNames()
? ??返回一個由指定對象的所有自身屬性的屬性名(包括不可枚舉屬性但不包括Symbol值作為名稱的屬性)組成的數(shù)組,Object.keys()與for in也可以獲取所以的key值(還會獲取到原型鏈上的可枚舉屬性不過可以使用hasOwnProperty()方法過濾掉)绑咱。如果參數(shù)不是一個原始對象類型,將拋出一個?TypeError? 異常
10.Object.getOwnPropertySymbols()?
方法返回一個給定對象自身的所有 Symbol?屬性的數(shù)組枢泰。
11.Object.isExtensible()
? ? ?判斷一個對象是否是可擴(kuò)展的(是否可以在它上面添加新的屬性)描融。// 密封對象、?凍結(jié)對象也是不可擴(kuò)展.
12.Object.preventExtensions(empty);
? 對象變的不可擴(kuò)展.也就是永遠(yuǎn)不能再添加新的屬性
13.Object.seal()
? ??讓一個對象密封衡蚂,并返回被密封后的對象窿克。密封對象是指那些不能添加新的屬性,不能刪除已有屬性毛甲,以及不能修改已有屬性的可枚舉性年叮、可配置性、可寫性玻募,但可以修改已有屬性的值的對象只损。
14. Object.isSealed
????判斷一個對象是否是密封的(sealed)
15.Object.freeze(obj)
? 該方法可以凍結(jié)一個對象,凍結(jié)指的是不能向這個對象添加新的屬性七咧,不能修改其已有屬性的值改执,不能刪除已有屬性,以及不能修改該對象已有屬性的可枚舉性坑雅、可配置性辈挂、可寫性。該方法返回被凍結(jié)的對象裹粤。(但是也是像淺拷貝似的终蒂。入如果再深一層蜂林,就凍結(jié)不了)
const object1 = {
? property1: 42
};
const object2 = Object.freeze(object1);
object2.property1 = 33;
16.Object.isFrozen(?obj?)
判斷一個對象是否被凍結(jié)。(不可擴(kuò)展的對象,屬性改為不可配置都是凍結(jié))