属性初始值的简写
当一个对象的属性与本地变量同名时,不必再写冒号和值,简单地只写属性名即可。
function createPerson(name,age){ return { name, age }; } //相当于 function createPerson(name,age){ return { name:name, age:age }; }
对象方法的简写
ES6中对对象字面量定义方法的语法进行了改进,消除了冒号和function关键字。
var person={ name:"jiaxiaonuo", age:24, sayName(){ console.log(this.name); } }; //相当于 var person={ name:"jiaxiaonuo", age:24, sayName:function(){ console.log(this.name); } };
可计算属性名
在ES5及早期版本的对象实例中,如果想要通过计算得到属性名,就需要用方括号代替点记法。有些包括某些字符的字符串字面量作为标识符会出错,其和变量放在方括号中都是被允许的。在ES6中,可在对象字面量中使用可计算属性名称,其语法与引用对象实例的可计算属性名称相同,也是使用方括号。
let lastName="last name"; let person={ "first name":"jia", [lastName]:"xiaonuo" }; console.log(person["first name"]);//"jia" console.log(person[lastName]);//"xiaonuo"
Object.is()方法
由于全等运算符(===)在判断NaN===NaN的返回值为false,同时判断+0===-0时返回值为true。而正常情况下,这两个判断结果是恰恰相反。这时使用Object.is()可以对上面的不足进行正确判断。正常情况下还是使用全等运算符进行判断,只有碰到上面两种特殊情况可以使用Object.is()进行判断。
console.log(+0===-0);//true console.log(Object.is(+0,-0);//false console.log(NaN===NaN);//false console.log(Object.is(NaN,NaN);//true
Object.assign()方法
混合(Mixin)方法中,一个对象接收来自另一个对象的属性和方法。任何使用mixin()方法的地方都可以直接使用Object.assign()方法来替换,同时Object.assign()方法可以接受任意数量的源对象,并按指定的顺序将属性复制到接收对象中。
var receiver={}; Object.assign(receiver, { type:"js", name:"file.js" }, { type:"css" } ); console.log(receiver.type);//"css" console.log(receiver.css);//"file.js
重复的对象字面量属性
ES5严格模式中加入对象字面量重复属性的校验,当同时存在多个同名属性时会抛出错误。在ES6中重复属性检查被移除,一旦出现重复属性,都会选择最后一个取值。
“use strict” var person={ name:"jia", name:"nuo" }; console.log(person.name);//"nuo"
自有属性枚举顺序
1.所有数字键按升序排序。
2.所有字符串键按照他们被加入对象的顺序排序。
3.所有symbol键按照他们被加入对象的顺序排序。
var obj ={ a:1, 0:1, c:1, 2:1, b:1, 1:1 }; obj.d=1; console.log(Object.getOwnPropertyNames(obj).join(""));//"012acbd"
Object.setPrototypeOf()方法
该方法可以任意指定对象的原型,他接受两个参数:被改变圆形的对象和替代第一个参数原型的对象。
let person={ getGreeting(){ return "hello"; } }; let dog={ getGreeting(){ return "woo"; } }; let friend=Object.create(person); console.log(friend.getGreeting());//"hello" console.log(Object.getPrototypeOf(friend)===person);//true Object.setPrototypeOf(friend,dog); console.log(friend.getGreeting());//"woo" console.log(Object.getPrototypeOf(friend)===dog);//true
super可以简化原型访问
必须在使用简写方法的对象中使用super引用,但如果在其他方法声明中使用会导致语法错误。
let person={ getGreeting(){ return super.getGreeting()+"hi!"; } }; //相当于 let person={ getGreeting(){ return Object.getPrototypeOf(this).getGreeting.call(this)+",hi!";