1.Object.is()方法
ES5中 比较两个值是否相等有两种运算符:
(1)相等运算符(= =)
(2)和严格相等运算符(= = =)
以上两种都有缺点,前者会自动转换数据类型,后者的NaN不等于自身,以及+0等于-0。
所以es6引入Object.is()方法来比较两个值是否严格相等,与严格比较运算符(===)的行为基本一致。
console.log(Object.is(10, '10'));//输出:false
console.log(Object.is({}, {}));//输出:false
console.log(Object.is(NaN, NaN));//输出:true
Object.is()方法的内部原理:
Object.prototype.myis=function (x,y){
console.log('执行');
if(x===y){
return true;
}
else{
return false;
}
}
console.log(Object.is({},{}));
Object.defineProperty(Object, 'is', {
value: function (x, y) {
console.log(111);
if (x === y) {
return true;
}
else {
return false;
}
}
});
console.log(Object.is({},{}));
2.Object.assign()方法
它用于对象的合并,将源对象(source)的所有可枚举属性,复制到目标对象(target)。如果目标对象与源对象有同名属性,或多个源对象有同名属性,则后面的属性会覆盖前面的属性。
三个参数分别为:
(1)合并之后的目标
(2)源对象一
(3)源对象二
let h1 = { a: 1, b: 2 };
let h2 = { a: 2, c: 3 };
let target = {};
console.log(Object.assign(target, h1, h2));//返回值是合并之后的对象
console.log(target);
//浅拷贝
const obj1 = { a: 1, b: { c: 1 } };
const obj2 = Object.assign({}, obj1);
obj1.b.c = 2;
console.log(obj2.b.c);//输出:2
//对象替换
let o1 = { a: 1, b: 2, c: 3 };
let o2 = { a: 'abc', b: 'def' };
console.log(Object.assign(o1, o2));//输出:Object { a: "abc", b: "def", c: 3 }
//数据合并是按照索引合并的
let o3 = [1, 2, 3];
let o4 = [4, 5];
console.log(Object.assign(o3, o4));
//对象添加属性
let work = {};
console.log(Object.assign(work, { a: 1, b: 2 }));
//给原型对象上添加属性
let p={};
p.sort=function (){}
Array.prototype.mySort = function () {
}
console.log(Array.prototype);
Object.assign(Array.prototype,{
myPai:function (){
}
});
console.log([]);