ES6 is(对象判断) & assign(合并对象)

is 对象判断

ES6中,Object对象给我们提供了is方法,用于判断两个对象

let obj1 = {
  name: 'beline'
}
let obj2 = {
  name: 'beline' 
}
console.log(Object.is(obj1.name,obj2.name)) // true

注意: Object.is(obj1.name,obj2.name) 的实现并不等于 obj1.name=== obj2.name的功能实现.具体往下看

很多面试题会有下面的情况:
1.+0 === -0 实际比较的都是0,所以为true
2.NaN === NaN

NaN(Not a Number)类型表示非数值,是一个特殊的数值,这个数值用于表示一个本来要返回数值的操作数未返回数值的情况(这样就不会抛出错误了)。任何与NaN进行运算的结果均会为NaN,NaN与自身不相等(NaN不与任何值相等)。

NaN=NaN;
NaN
 
NaN==NaN;
false
 
NaN===NaN;
false

前面对NaN做了简单的介绍,NaN与自身不相等,也不与任何值相等,因此下面的NaN===NaN 返回为false

console.log(+0 === -0) // true
console.log(NaN === NaN) // false

然后我们再来看Object.is()

console.log(Object.is(+0, -0))  // false
console.log(Object.is(NaN,NaN)) // true

对比发现,Object.is()和===的结果相反,这是为什么呢?

=== 判断的是值是否相等 +0和-0的值相等所以为true, NaN本身是对象,无反判断对象的值是否相等,同时NaN也不与任何值相等,所以是false
Object.is() 判断的是严格相等, +0与-0虽然值相等,但是内存区块地址是不等的,所以为false.而NaN两个都是一样的,因此显示为true

assign 合并对象

ES6在Object对象上给我们提供了assign函数用于合并对象,使用起来也非常简单,具体看一下代码就能会:

let a = {a: "beline"}
let b = {b: "tang"}
let c = {c: "tom"}
let d = Object.assign(a, b, c)
console.log(d)

你可能感兴趣的:(ES6 is(对象判断) & assign(合并对象))