1. 程式人生 > >es6 javascript 的Object.is(),判斷兩個值相等

es6 javascript 的Object.is(),判斷兩個值相等

ES5 比較兩個值是否相等,只有兩個運算子:相等運算子(==)和嚴格相等運算子(===)。它們都有缺點,前者會自動轉換資料型別,後者的NaN不等於自身,以及+0等於-0。 JavaScript 缺乏一種運算,在所有環境中,只要兩個值是一樣的,它們就應該相等。

ES6 提出 “Same-value equality” (同值相等)演算法,用來解決這個問題。Object.is就是部署這個演算法的新方法。它用來比較兩個值是否嚴格相等,與嚴格比較運算子( === )的行為基本一致。

Object.is('foo', 'foo');
// true
Object.is({}, {})
// false
不同之處只有兩個:一是+0不等於-0,二是NaN等於自身。
+0 === -0 //true
NaN === NaN // false
Object.is(+0, -0) // false
Object.is(NaN, NaN) // true
ES5 可以通過下面的程式碼,部署Object.is。
Object.defineProperty(Object, 'is', {
	value: function(x, y) {
		if (x === y) {
			//  針對 +0  不等於 -0 的情況
			return x !== 0 || 1 / x === 1 / y;
		}
		//  針對 NaN 的情況
		return x !== x && y !== y;
	},
	configurable: true,
	enumerable: false,
	writable: true
});