es6引入Object.is();方法是为了弥补全等运算符的不准确运算,这个方法接受两个参数,如果这两个参数类型相同且值相等,则返回true
console.log(Object.is(5, 5)); // true
console.log(Object.is(5, '5')); // false
console.log(Object.is(+0, -0)); // false
Object.is() 方法大部分情况下与 ===运算符结果相同,唯一的区别在于+0 和 -0 被识别为不相等的NaN 与NaN 等价。
Object.assign()方法
(混合)Mixin是javascript中实现对象组合最流行的一种模式,在一个mixin方法中,一个对象接收来自另一个对象的属性和方法。
许多javascript库中都有类似mixin方法:
function mixin(receiver, supplier) {
Object.keys(supplier).forEach(function(key) {
receiver[key] = supplier[key];
});
return receiver;
}
mixin()函数遍历supplier的自有属性并复制到receiver中(此处为浅复制,当属性值为对象是只复制对象的引用) 这样一来,receiver不通过继承就可以获得新的属性。
Object.assing()方法接受任意数量的源对象,并按指定的顺序将属性复制到接收对象中。所以如果多个源对象具有同名属性,则排位靠后的源对象会覆盖排位考前的。
Object.assign(target, source1, source2, ... );
举个栗子:
const targetObj = {
a: 1,
src: 'www.baidu.com',
onclick() {
alert('hello');
}
}
let sourceObj = {
name: 'tom',
age: 20,
gender: 'female',
category: {
score: '',
science: {
math: 90,
chemistry: 80
}
},
getName() {
alert('name');
}
}
let obj123 = Object.assign(targetObj, sourceObj);
console.log(`The obj123 is ${JSON.stringify(obj123)}`);
// The obj123 is {"a":1,"src":"www.baidu.com","name":"tom","age":20,"gender":"female","category": {"score":"","science":{"math":90,"chemistry":80}}}
console.log(`${JSON.stringify(obj123.category.science.math)}`);// 90
此外,还有对象方法的简写方法如:
在ECMAScript 5及其早期版本中为对象定义方法必须通过指定名称并完整定义函数来实现如:
var person = {
name: 'David',
sayName: function() {
console.log(this.name);
}
}
而在ECMAScript 6中语法更简洁,消除了冒号和function关键字,如:
var person = {
name: 'David',
sayName() {
console.log(this.name);
}
}
还有可计算属性名(Computed Property Name)
在ECMAScript 5中想要通过计算得到属性名就需要用方括号代替点记法:
let lastName = ‘last name’;
var person = {
‘first name’: ‘Nicholas’;
[lastName]: ‘David’;
}
console.log(person[‘first name’]); // ‘Nicholas’
console.log(person[lastName]); // ‘David’