ES6對象擴展

es6中對象的屬性新增簡潔表示法、表達式表達法,對象新增Object.is方法和Object.assign方法。es6

一、屬性的簡潔表示法chrome

// 屬性的簡潔表示法,屬性名用變量名錶示,屬性值爲變量的值
var foo='abc'
var obj={foo}
obj // {foo: "abc"}

//方法的簡潔表示法,須要注意,簡潔表示法的屬性名老是字符串
var obj={
  class(){}
}
// 等價於,雖然IE9/firefox/chrome支持保留字直接做屬性名 ,但應儘可能避免這種寫法,須要加引號使用。var obj={
  'class': function(){}
}

二、屬性的表達式表達法數組

var obj={}
obj.name='mdj'
obj['ac'+'dc']=123
obj // {name: "mdj", acdc: 123}

var obj1={
  ['h'+'i'](){return 'hi'}
}
obj1 //{hi: ƒ}

注意,屬性名錶達式與簡潔表示法,不能同時使用,會報錯。spa

// 報錯
var foo = 'bar';
var bar = 'abc';
var baz = { [foo] };

// 正確
var foo = 'bar';
var baz = { [foo]: 'abc'};

三、Object.is用來比較兩個值是否嚴格相等,與===功能相似,略有不一樣firefox

// 不一樣之處
NaN===NaN // false
-0===+0 // true

Object.is(NaN,NaN) // true
Object.is(+0,-0) // false

四、Object.assign用於對象的合併,將源對象的全部可枚舉屬性複製到目標對象code

var target = { a: 1 };
 
var source1 = { b: 2,c:2 };
var source2 = { c: 3 };
 
Object.assign(target, source1, source2);
target // {a:1, b:2, c:3}
// 須要注意,當有多個源對象時,後面的屬性會覆蓋前面的屬性,這裏source1的c屬性被覆蓋了

若是隻有一個參數,則直接返回,若是該參數不是對象,則會先轉換爲對象,若是沒法轉換爲對象,則報錯,如null、undefined對象

Object.assign({a:12}) //直接返回該對象
typeof Object.assign(2) // "object"

源對象能夠是數組和字符串,源對象的首參數必須有效,後面的參數若是無效,會直接跳過。blog

Object.assign({}, ['a','b']); //{0: "a", 1: "b"}
Object.assign({}, 'ab'); //{0: "a", 1: "b"}
相關文章
相關標籤/搜索