Object新方法 Object.is()方法 在js中比較兩個值時,你可能會用相等運算符==或者嚴格相等運算符 ===。為了避免在比較時發生強制類型轉換,許多開發者更傾向於使用後者。 Object.is()接受兩個參數,並且會在二者的值相等時返回true,此時要求二者的數據類型相同並且值也相等。 ...
Object新方法
Object.is()方法
在js中比較兩個值時,你可能會用相等運算符==或者嚴格相等運算符 ===。為了避免在比較時發生強制類型轉換,許多開發者更傾向於使用後者。
Object.is()接受兩個參數,並且會在二者的值相等時返回true,此時要求二者的數據類型相同並且值也相等。
console.log(Object.is(+0, -0)); //false
console.log(+0 == -0); //true
console.log(+0 === -0); //true
console.log(NaN == NaN);//false
console.log(NaN === NaN);//false
console.log(Object.is(NaN, NaN));//true
在許多情況下,Object.js()的結果與===運算符是相同的,僅有的例外是:它會認為+0與-0不相等,而且NaN等於NaN。
Object.assign()方法
Object.assign()可以設置一個對象從另一個對象接受屬性和方法。Object.assign()接受任意數量的供應者,而接受者會按照供應者在參數的順序來依次接收他們的屬性。這意味著在接收者中,第二個供應者的屬性可能會覆蓋第一個供應者的
var recevier = {};
Object.assign(recevier, {
type: "js",
name: "file.js"
}, {
type: "css"
})
console.log(recevier);//{type:"css",name:"file.js"}
重覆的對象字面量屬性
在es5的嚴格模式下,如果對象存在重覆的屬性名,就會拋出錯誤。在es6中無論嚴格模式還是非嚴格模式都不會拋出錯誤。當存在重覆屬性時,排在後面的屬性的值會成為該屬性的實際值。
更強大的原型
修改對象的原型
一般來說,對象的原型會在通過構造器或Object.create()方法創建該對象時被指定。es5可以通過Object.getPrototypeOf()方法從任意對象中獲取其原型。
es6添加了Object.setPrototypeOf()方法來修改任意制定對象的原型。它接受兩個參數:需要被修改原型的對象,以及將會成為前者原型的對象。
var person = {
getGreeting() {
return "hello";
}
};
var dog = {
getGreeting() {
return "woof";
}
};
let friend = Object.create(person);
Object.setPrototypeOf(friend, dog);
console.log(friend.getGreeting());//woof
使用super引用的簡單原型訪問
super是指向當前對象的原型的一個指針。
let friend = {
getGreeting() {
return super.getGreeting() + ",hi";
}
}
Object.setPrototypeOf(friend, person);
console.log(friend.getGreeting());//hello,hi
可以使用super引用來調用對象原型上的任何方法,只要這個引用是位於簡寫的方法之內。試圖在簡寫方法之外的情況使用super會導致語法錯誤。
使用多級繼承時,super引用就是非常強大的,因為這種情況下Object.getPrototypeOf()不在適用於所有場景。
自有屬性的枚舉順序
自由屬性枚舉時基本順序如下:
- 所有的數字類型鍵,按升序排列
- 所有的字元串類型鍵,按被添加到對象的順序排列
所有的符號類型鍵,按添加順序排列
var obj = { a: 1, 0: 1, c: 1, 2: 1, b: 1, 1: 1 } obj.d = 1; console.log(Object.getOwnPropertyNames(obj).join(""));//012acbd
對象字面量語法的擴展
屬性初始化器的速記法
在es6中,當對象的一個屬性名稱與本地變數名相同時,可以簡單書寫名稱而省略冒號和值
function createPerson(name.age){
return {
name,
age
};
}
方法簡寫
在es5及更早版本中,你必須制定一個名稱並用完整的函數定義來為對象添加方法。通過省略冒號和function關鍵字,es6將這個語法變得更簡潔。
var person = {
name:"cc",
sayName(){
console.log(this.name);
}
}
需計算屬性名
在es6中,需計算屬性名是對象字面量語法的一部分,它用的也是方括弧表示法,與此前在對象實例上的用法一致。
var lastName = "last name";
var person = {
"first name": "nicolas",
[lastName]: "zakas"
}
console.log(person[lastName]);
對象字面量內的方括弧表明該屬性需要計算,其結果是一個字元串。意味著可以包含表達式:
var suffix = "name";
var person = {
["first "+suffix]:"nicolas",
["last "+suffix]:"zakas"
}