1. 新增的对象字面量语法
- 成员速写
如果对象字面量初始化时,成员的名称来自于一个变量,并且和变量的名称相同,则可以进行简写
- 方法速写
对象字面初始化时,方法可以省略冒号和function关键字
- 计算属性名
有的时候,初始化对象时,某些属性名可能来自于某个表达式的值,在ES6,可以使用中括号来表示该属性名是通过计算得到的。
const prop1 = "name2";
const prop2 = "age2";
const prop3 = "sayHello2";
const user = {
[prop1]: "小明",
",
[prop2]: 100,
[prop3](){
console.log(this[prop1], this[prop2])
}
}
user[prop3]();
console.log(user)
function createUser(loginId, loginPwd, nickName) {
const sayHello = function () {
console.log("loginId", this.loginId, "nickname", this.nickName)
}
return {
loginId,
loginPwd,
nickName,
sayHello,
id: Math.random()
}
}
const u = createUser("abc", "123", "aaa");
u.sayHello();
const user = {
name: "小明",
age: 100,
sayHello(){
console.log(this.name, this.age)
}
}
user.sayHello();
2. Object的新增API
- Object.is
用于判断两个数据是否相等,基本上跟严格相等(===)是一致的,除了以下两点:
- NaN和NaN相等
- +0和-0不相等
- Object.assign
用于混合对象 - Object.getOwnPropertyNames 的枚举顺序
Object.getOwnPropertyNames方法之前就存在,只不过,官方没有明确要求,对属性的顺序如何排序,如何排序,完全由浏览器厂商决定。
ES6规定了该方法返回的数组的排序方式如下:
- 先排数字,并按照升序排序
- 再排其他,按照书写顺序排序
- Object.setPrototypeOf
该函数用于设置某个对象的隐式原型
比如: Object.setPrototypeOf(obj1, obj2),
相当于: obj1.__proto__ = obj2
console.log(obj1)
const obj1 = {
a: 1
}
const obj2 = {
b: 2
}
// obj1.__proto__ = obj2
Object.setPrototypeOf(obj1, obj2)
console.log(obj1)
console.log(NaN === NaN); // false
console.log(+0 === -0); // true
console.log(Object.is(NaN, NaN))
console.log(Object.is(+0, -0))
const obj = {
d: 1,
b: 2,
a: 3,
0: 6,
5: 2,
4: 1
}
const props = Object.getOwnPropertyNames(obj)
console.log(props)
const obj1 = {
a: 123,
b: 456,
c: "abc"
}
const obj2 = {
a: 789,
d: "kkk"
}
/*
{
a: 789,
b: 456,
c: "abc",
d: "kkk"
}
*/
//将obj2的数据,覆盖到obj1,并且会对obj1产生改动,然后返回obj1
// const obj = Object.assign(obj1, obj2);
const obj = Object.assign({}, obj1, obj2);
console.log(obj)
console.log(obj===obj1)
console.log(obj1)
console.log(obj2)