ES6对象(1):新增语法与API

目录

一.新增的对象字面量语法

1.成员速写

 2.方法速写

3.计算属性名

二.Object的新增API

1.Object.is

2.Object.assign

3.Object.getOwnPropertyNames的枚举顺序

4.Object.setPrototypeOf


一.新增的对象字面量语法

1.成员速写

如果对象字面量初始化时,成员的名称来自于一个变量,并且和变量名的名称相同,则可以进行简写

【例1-1】

之前的写法

function personMes(name, sex, age, address) {
    return {
        name : name,
        sex : sex,
        age : age,
        address: address,
    }
}
const person = personMes('jwh', 'female', 18, '陕西省');
console.log(person);

ES6写法

function personMes(name,sex,age,address) {
    return{
        name,
        sex,
        age,
        address
    }
}
const person = personMes('jwh', 'female', 18, '陕西省');
console.log(person);

 2.方法速写

对象字面初始化时,方法可以省略冒号和function关键字

【例1-2】

之前的写法

const init = {
    name : 'jwh',
    age : 18,
    print: function () {
        console.log(this.name, this.age);
    }
}
init.print();

ES6写法

const init = {
    name : 'jwh',
    age : 18,
    print() {
        console.log(this.name, this.age);
    }
}
init.print();

3.计算属性名

有的时候,初始化对象时,某些属性名可能来自于某个表达式的值,在ES6中,可以使用中括号来表示该属性名是通过计算得到的。

【例1-3】

const prop1 = 'name';
const prop2 = 'age';
const prop3 = 'print';
const user = {
    [prop1] : 'jwh',
    [prop2] : 18,
    [prop3] () {
        console.log(this[prop1] ,this[prop2])
    }
}
user[prop3]();
console.log(user);

二.Object的新增API

1.Object.is

用于判断两个数据是否相等,基本上跟严格相等(===)是一致的,除了以下两点

  • NaN和NaN相等
  • +0和-0不相等

【例2-1】

console.log('NaN === NaN的结果', NaN === NaN);
console.log('Object.is(NaN, NaN)', Object.is(NaN, NaN));
console.log('+0 === -0的结果', +0 === -0);
console.log('Object.is(+0, -0)',Object.is(+0, -0));

【结果】

图2-1

2.Object.assign

用于混合对象,Object.assign(obj1, obj2,...),将所有对象按照顺序混合到第一个对象上,若obj1没有的属性则直接添加,若obj1有该属性,则进行覆盖。

【例2-2】

obj1 = {
    name: 'jwh',
    age: 18,
    sex: 'female'
}
obj2 = {
    grade: 1,
    number: 1901210214,
    name: 'ths'
}
obj3 = {
    address: 2313,
    grade: 2
}
Object.assign(obj1, obj2, obj3);
console.log('obj1:', obj1);
console.log('obj2:', obj2);
console.log('obj3:', obj3)

【结果】

图2-2

3.Object.getOwnPropertyNames的枚举顺序

Object.getOwnPropertyNames方法之前就存在,只不过官方没有明确要求对属性的顺序如何排序,具体如何排序,完全由浏览厂商决定。ES6规定了该方法返回的数组的排序方式如下

  • 先排数字,并按照升序排列
  • 再排其他,按照书写顺序排序

【例2-3】

obj1 = {
    2: 'grade',
    name: 'jwh',
    1: 'address',
    age: 18,
    sex: 'female',
}
console.log(Object.getOwnPropertyNames(obj1));

【结果】

图2-3

4.Object.setPrototypeOf

该函数用于设置某个对象的隐式原型,比如Object.setPrototypeOd(obj1, obj2),相当于obj1.__proto__ = obj2.__proto__

【例2-4】不设置的话,obj1的隐式原型是Object

obj1 = {
    name: 'jwh',
    age: 18,
    sex: 'female'
}
obj2 = {
    grade: 1,
    number: 1901210214
}
Object.setPrototypeOf(obj1, obj2)
console.log(obj1);

【结果】

图2-4
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值