对象字面量的增强:
- 在ES6中,在对象中,属性名和变量名相同的时候,可以省略冒号和后面的变量引用
const flag = "flag";
const obj = {
name:"li",
flag,
age : 21
}
console.log(obj);
- 对象内部的函数定义方式也可进行简化
const obj = {
name:"li",
age:21,
//message:function(){}
message(){
console.log(this.name + "," + this.age);
}
}
console.log(obj.message())
在对象字面量里,在对象内部添加表达式,作为对象的属性名,以达成动态改变对象的属性名
const age = "age";
const sex = "sex";
const obj = {
name:"li",
//message:function(){}
message(){
console.log(this.name + "," + this.age);
}
}
obj[age] = 18;
obj[age] = 21;//age动态改变
obj[sex] = "men";
obj[sex] = 18;
console.log(obj.message())
在ES6中,对象字面量还有一个变化就是,可以直接在对象内部书写动态的属性名。——计算属性名
const age = "age";
const obj = {
name:"li",
message(){
console.log(this.name + "," + this.age);
},
//[ ]内部可以是任意表达式
[age]:19
//[1+2]:12
}
console.log(obj.message());
obj[age] = 18;
obj[age] = 21;//age动态改变
console.log(obj.message())
对象扩展方法
- Object.assign方法:将多个源对象中的属性复制到一个目标对象中(目标对象,源对象,源对象,…)
const source = {
a : 123,
b : 123
}
const target = {
a : 456,
c : 789
}
const result = Object.assign(target,source);
console.log(result);
console.log(target);
console.log(result === target);//true
const source = {
a : 123,
b : 123
}
const source = {
b : 678,
d : 789
}
const target = {
a : 456,
c : 789
}
const result = Object.assign(target,source);
console.log(result);
//{a: 123, c: 789, b: 678, d: 789}
console.log(target);
//{a: 123, c: 789, b: 678, d: 789}
console.log(result === target);//true
- 利用Object.assign方法 创建复制对象函数
//一般情况下写复制函数
function fn(){
obj.name = "tom";
console.log(obj);
}
const obj(){
name:"li",
age:21
}
fn(obj);
console.log(obj);
利用Object.assign方法优化上述复制函数,内部更改时,不会使obj原来的对象发生更改
function fn(){
//定义一个新变量存储复制的obj对象,这样之后更改这个新对象就可以了
const newObj = Object.assign({},obj);
newObj.name = "tom";
console.log(newObj);
}
const obj = {
name:"li",
age:22
}
fn(obj);
console.log(obj);
还可以利用Object.assign方法来简化函数中对象参数的接受
function Block(option){
this.width = option.width;
this.height = option.height;//在接收对象参数时,需要一个一个的获取赋值
}
使用Object.assign简化后
function Block(option){
Object.assign(this,option);
//将option的属性复制到this上
}
const block = new Block({width:100,height:100,x:2,y:2});
console.log(block1);
//Block {width:100,height:100,x:2,y:2}
- Object.is方法:判断两个值是否相等
console.log(0 == false);//true
console.log(0 === false);//false
但是 == 和 ===(全等于)有时候处理数学问题时还是会出错:+0 === -0 结果是true,NaN === NaN,结果是false(NaN生成结果不一样,所以判断不相等)。
ES6中使用Object.is判断
Object.is(+0,-0);//false
Object.is(NaN,NaN);//true