ES6 中对象字面量的增强和对象扩展方法

对象字面量的增强:
  • 在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
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值