判等
参考链接:https://www.cnblogs.com/mengfangui/p/9343163.html
1. Abstract Equality Comparision ==
  - == 比较前进行强制转换
 
2. Strict Equality Comparison ===
  - === 不进行强制类型转换
 NaN不等于自身+0等于-0- indexOf内部使用的就是
=== 
3. Same Value Object.is(val1, val2)
  - 区分正负零(1/0 === Infinity; 1/-0 === -Infinity)
 - NaN等于NaN(x !== x)
 
// pollyfill Object.is()
if(!Object.is){
	Object.is = function(x,y){
		if(x===y){
			// 判断 +0 和 -0
			return x !== 0 || 1/x === 1/y;
		}else{
			// 判断NaN
			return x!==x && y!==y;
		}
	}
}
  4. Same Value Zero
- 暂时没有API,但是多处使用
 - set,map
 - 数组的includes
 
var s = new Set();
s.add(0);
s.add(NaN);
s.has(-0); // true
s.has(NaN); // true
var a = [0, NaN];
a.indexOf(-0); // 0
a.indexOf(NaN); // -1
a.includes(-0); // true
a.includes(NaN); // true
  总结
- 几种方法的不同之处主要在于如何处理
0和NaN,组合出了多种方法 - 除了sameValue,都不会区分正负零
 - 要想区分
-0和0,就只能用Object.is() - sameValue和sameValueZero都认为
NaN等于NaN 

京公网安备 11010502036488号