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) 的實現(xiàn)并不等于 obj1.name=== obj2.name的功能實現(xiàn).具體往下看
很多面試題會有下面的情況:
1.+0 === -0 實際比較的都是0,所以為true
2.NaN === NaN
NaN(Not a Number)類型表示非數(shù)值,是一個特殊的數(shù)值,這個數(shù)值用于表示一個本來要返回數(shù)值的操作數(shù)未返回數(shù)值的情況(這樣就不會拋出錯誤了)榜旦。任何與NaN進(jìn)行運(yùn)算的結(jié)果均會為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
對比發(fā)現(xiàn),Object.is()和===的結(jié)果相反,這是為什么呢?
=== 判斷的是值是否相等 +0和-0的值相等所以為true, NaN本身是對象,無反判斷對象的值是否相等,同時NaN也不與任何值相等,所以是false
Object.is() 判斷的是嚴(yán)格相等, +0與-0雖然值相等,但是內(nèi)存區(qū)塊地址是不等的,所以為false.而NaN兩個都是一樣的,因此顯示為true
assign 合并對象
ES6在Object對象上給我們提供了assign函數(shù)用于合并對象,使用起來也非常簡單,具體看一下代碼就能會:
let a = {a: "beline"}
let b = {b: "tang"}
let c = {c: "tom"}
let d = Object.assign(a, b, c)
console.log(d)