javaScript Object.is和==和===
相等运算符 ( ==)
== 相等运算符在判断相等前对两边的变量(如果它们不是同一类型)进行强制转换
- 如果操作数具有相同的类型,则按如下方式进行比较:
- 对象:
true仅当两个操作数都引用同一个对象时才返回。 - 字符串:
true仅当两个操作数具有相同顺序的相同字符时才返回。 - 数字:
true仅当两个操作数具有相同值时才返回。+0并被-0视为相同的值。如果任一操作数是NaN,则返回false;所以,NaN永远不等于NaN。 - 布尔值:
true仅当操作数为 bothtrue或 both时才返回false。 - BigInt:
true仅当两个操作数具有相同值时才返回。 - 符号:
true仅当两个操作数引用相同的符号时才返回。
- 对象:
- 如果其中一个操作数是
nullorundefined,则另一个也必须是nullorundefined才能返回true。否则返回false。 - 如果其中一个操作数是对象而另一个是基元,则按该顺序使用对象的
@@toPrimitive()(带有"default"提示)valueOf()、、和toString()方法将对象转换为基元。(这个原语转换和另外使用的一样。) - 在这一步,两个操作数都被转换为原语(String、Number、Boolean、Symbol 和 BigInt 之一)。其余的转换是逐案完成的。
- 如果它们属于同一类型,请使用步骤 1 进行比较。
- 如果其中一个操作数是 Symbol 而另一个不是,则返回
false。 - 如果其中一个操作数是布尔值,而另一个不是,则将布尔值转换为数字:
true转换为 1,然后false转换为 0。然后再次松散地比较两个操作数。 - 数字转字符串:使用与构造函数相同的算法将字符串转换为数字
Number()。将导致转换失败NaN