引言:ES6添加了有關對象、Object的特性。 |
一、對象的兩種表示法【掌握】
1)簡潔表示法
ES6允許直接寫入變量和函數作爲對象的屬性和方法。ES6允許在對象中只寫屬性名,不寫屬性值。這時,屬性值等於屬性名所表示的變量。對象屬性的簡寫如代碼塊1-1-1。
/***@@ 代碼塊1-1-1 屬性的簡寫 @@***/
var foo = 'bar';
var baz = {foo};
baz // {foo: "baz"}
function f(x,y){
return {x,y};
}
//等同於
function f(x,y){
return {x:x,y:y};
}
f(1,2); // Object {x :1, y: 2}
除了屬性的簡寫,方法也可以簡寫。如代碼塊1-1-2。
/***@@ 代碼塊1-1-2 方法的簡寫 @@***/
var o = {
method() {
return "hello AJ";
}
};
//等同於
var o = {
method : function () {
return "hello AJ";
}
};
下面給出一個綜合的例子。如代碼塊1-1-3。
/***@@ 代碼塊1-1-3 簡寫的綜合例子 @@***/
var person = {
name = "張雨澤",
birth,//等同於birth:birth
hello() { console.log('My name is ',this.name);}//等同於hello: function() ...
};
2)屬性名表達式法
屬性名表達式法,顧名思義,就是用表達式的計算結果來作爲屬性名。如代碼塊1-2-1。
/***@@ 代碼塊1-2-1 屬性名表達式法 @@***/
var prop = 'val';
var obj= {
[prop] : true,
['a'+'bc'] : 123
};
//obj { val : true, abc : 123}
二、Object.is()【瞭解】
Object.is()用來比較兩個值是否嚴格相等。它與嚴格相等比較運算符(===)的行爲基本一致。見代碼塊2-1。
/***@@ 代碼塊2-1 Object.is()用法規範 @@***/
Object.is('foo', 'foo') // true
Object.is({}, {}) // false
//Object.is與===的不同之處只有兩個,一個是-0與+0,一個是NaN等於自身
+0 === -0 // true
NaN === NaN // false
Object.is(+0 , -0); // false
Object.is(NaN, NaN) // true
//ES5可以通過下面的代碼來部署Object.is
Object.defineProperty(Object, 'is',{
value: function(x,y){
if(x===y) {
//針對+0 不等於 -0的情況
return x !==0 || 1/x ===1/y;
}
// 針對NaN的情況
return x !== x&& y!==y;
},
configurable:true,
enumerable: true,
writable: true
});
三、Object.assign()【瞭解】
Object.assign()用來將源對象source的所有可枚舉屬性複製到目標對象target。見代碼塊3-1。
/***@@ 代碼塊3-1 Object.assign() @@***/
var target = {a:1};
var source1 = {b:2};
var source2 = {c:3};
Object.assign(target,source1,source2);
target // {a:1,b:2,c:3}
查看更多ES6教學文章:
1. 【ES6】let與const 詳解
2. 【ES6】變量的解構賦值
3. 【ES6】字符串的拓展
4. 【ES6】正則表達式的拓展
5. 【ES6】數值的拓展
6. 【ES6】數組的拓展
7. 【ES6】函數的拓展
8. 【ES6】對象的拓展
9. 【ES6】JS第7種數據類型:Symbol
10. 【ES6】Proxy對象
11. 【ES6】JS的Set和Map數據結構
12. 【ES6】Generator函數詳解
13. 【ES6】Promise對象詳解
14. 【ES6】異步操作和async函數
15. 【ES6】JS類的用法class
16. 【ES6】Module模塊詳解
17. 【ES6】ES6編程規範 編程風格
參考文獻
阮一峯 《ES6標準入門(第2版)》