相等比較操作
JavaScript 有四種不同的相等比較操作。
SameValue
如果兩個運算元屬於同一個 Type 並且值相同,則返回 true。
注意:物件的值是引用。
你可以通過 Object.is(ECMAScript 6)使用此比較演算法。
例子:
Object.is(1, 1); // true
Object.is(+0, -0); // false
Object.is(NaN, NaN); // true
Object.is(true, "true"); // false
Object.is(false, 0); // false
Object.is(null, undefined); // false
Object.is(1, "1"); // false
Object.is([], []); // false
該演算法具有等價關係的屬性 :
- 反身性 :
Object.is(x, x)是true,任何值x - 對稱性 :
Object.is(x, y)是true,如果且僅當Object.is(y, x)是true時,對於任何值x和y。 - 及物性 :如果
Object.is(x, y)和Object.is(y, z)是true,則Object.is(x, z)也是true,對於任何值x,y和z。
SameValueZero
它的行為類似於 SameValue,但認為+0 和 -0 是相同的。
你可以通過 Array.prototype.includes(ECMAScript 7)使用此比較演算法。
例子:
[1].includes(1); // true
[+0].includes(-0); // true
[NaN].includes(NaN); // true
[true].includes("true"); // false
[false].includes(0); // false
[1].includes("1"); // false
[null].includes(undefined); // false
[[]].includes([]); // false
該演算法仍具有等價關係的屬性 :
- 反身性 :
[x].includes(x)是true,任何值x - 對稱性 :
[x].includes(y)是true,如果且僅當[y].includes(x)是true,對於任何值x和y。 - 及物性 :如果
[x].includes(y)和[y].includes(z)是true,則[x].includes(z)也是true,任何值x,y和z。
嚴格的相等比較
它的行為類似於 SameValue,但是
- 認為
+0和-0是相等的。 - 認為
NaN與任何價值都不同,包括其本身
你可以通過 === 運算子(ECMAScript 3)使用此比較演算法。
還有 !== 運算子(ECMAScript 3),它否定了 === 的結果。
例子:
1 === 1; // true
+0 === -0; // true
NaN === NaN; // false
true === "true"; // false
false === 0; // false
1 === "1"; // false
null === undefined; // false
[] === []; // false
該演算法具有以下屬性:
- 對稱 :
x === y是true,當且僅當,y === xistrue, for any valuesxandy`。 - 及物性 :如果
x === y和y === z是true,則x === z也是true,對於任何值x,y和z。
但不是等價關係, 因為
NaN不反身 :NaN !== NaN
抽象的相等比較
如果兩個運算元屬於同一型別,則其行為類似於嚴格等同比較。
否則,它會強制它們如下:
undefined和null被認為是相等的- 將數字與字串進行比較時,字串將被強制轉換為數字
- 將布林值與其他值進行比較時,布林值會被強制轉換為數字
- 將物件與數字,字串或符號進行比較時,會將物件強制轉換為基元
如果存在強制,則遞迴地比較強制值。否則演算法返回 false。
你可以通過 == 運算子(ECMAScript 1)使用此比較演算法。
還有 != 運算子(ECMAScript 1),它否定了 == 的結果。
例子:
1 == 1; // true
+0 == -0; // true
NaN == NaN; // false
true == "true"; // false
false == 0; // true
1 == "1"; // true
null == undefined; // true
[] == []; // false
該演算法具有以下屬性:
- 對稱 :
x == y是true,如果且僅當y == x是true時,對於任何值x和y。
但不是等價關係, 因為