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"}}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值