es6-對象擴展(一)

屬性簡介表達(一)

一句話,對象的屬性如果是一個變量,那麼值就是這個變量代表的值

let name = 'uzi';
let user = {name};
user	// {name: "uzi"}
// 對於對象中方法也一樣
let test = {
	tt() {}
};
// 等同於
let test = {
	tt: function () {}
}

屬性名錶達式

使用字面量方式定義對象(使用大括號),則在 ES5 中只能使用方法 (標識
符)定義屬性。

let obj = {
	name: 'uzi'
}

ES6 允許字面量定義對象時用表達式作爲對象 屬性名,把屬性名放在[]內

let pro = 'name';
let obj = {
	[pro]: 'uzi'
}
// 與上面es5定義的相同

注意:屬性名錶達式屬性簡介表達不能同時使用,會報錯

let pro = 'name';
let obj = {
	[pro]
};		//Uncaught SyntaxError: Unexpected token }

Object.is()

es5中有兩種判斷相等的運算符:相等運算符(==)嚴格相等運算符(===)。 他們都有自己的缺點,相等運算符會自動進行類型轉換,嚴格相等運算符中存在NaN不等於自身,+0等於-0的問題。es6提出了“ Same-value equality ”(同值相等)算法,即在所有環境中,只要連個值一樣,就相等,Object.is()就是部署在這個算法上的新方法。

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

Object.assign()

用於合併對象,第一個參數是目標對象,後面的參數是源對象(別合併),如果目標對象和源對象中有相同的屬性,後者將覆蓋前者。

// 目標對象
let target = {};
// 源對象1
let source1 = {
	a: 'a'
};
// 源對象2
let source2 = {
	b: 'b'
};
Object.assign(target, source1, source2);
target;		// {a: "a", b: "b"}

注意:Object.assign()在合併對象時,如果源對象中沒有屬性是對象的時候,其實是深拷貝,當源對象中存在屬性爲對象時,第一層是深拷貝,後面爲淺拷貝。

// 目標對象
let target = {};
// 源對象1
let source1 = {
	a: 'a',
	obj: {
		b: 'a'
	}
};
Object.assign(target, source1);
target;		//{a: "a",obj: {b: "a"}}
// 改變源對象第一層
source1.a = 'b';
// 發現目標對象沒有改變(深拷貝)
target;		//{a: "a",obj: {b: "a"}}
// 改變源對象第二層
source1.obj.b = 'b';
// 發現目標對象發生改變(淺拷貝)
target;		//{a: "a",obj: {b: "b"}}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章