Dieser Artikel bietet Ihnen eine detaillierte Erklärung von ==, === und Object.js() (umfassend). Ich hoffe, dass er Ihnen helfen wird.
In diesem Artikel werden hauptsächlich die drei Gleichheitsoperationen in JavaScript erläutert: ==, === und Object.js(). Vertiefen Sie den Eindruck aller durch Vergleiche und Beispiele und erläutern Sie einzelne Beispiele ausführlich.
Für x === y sind die Vergleichsschritte dieses Operators wie folgt:
1 Wenn sich der Typ von x vom Typ von y unterscheidet, wird „false“ zurückgegeben. Wenn der Typ von x eine Zahl ist, dann:
a Wenn x NaN ist, gib „false“ zurück; . Wenn x und y der gleiche numerische Wert sind, wird „true“ zurückgegeben. Wenn x +0 und y „-0“ ist, wird „true“ zurückgegeben y ist +0, gibt true zurück; f. Gibt das Ergebnis von SameValueNonNumber(x, y) zurück.
SameValueNonNumber(x, y) abstrakte Operation vergleicht zwei Nichtzahlen und ob x und y vom gleichen Typ sind. Die Vergleichsschritte sind wie folgt:
1 x ist null oder undefiniert. Geben Sie „true“ zurück 🎜>
3, wenn x ein boolescher Typ ist, 4 Wenn x und y beide wahr oder falsch sind, geben Sie true zurück, andernfalls geben Sie false zurück; ein Symboltyp, Wenn x und y der gleiche Symbolwert sind, geben Sie „true“ zurück, andernfalls geben Sie „false“ zurück. 6 Wenn x und y der gleiche Objektwert sind, geben Sie „true“ zurück FALSCH. Die zu beachtenden Punkte sind NaN, +0, -0:NaN === NaN // false +0 === -0 // true -0 === +0 // true
1. Wenn sich der Typ von x vom Typ von y unterscheidet, wird „false“ zurückgegeben. 2 Wenn der Typ von x eine Zahl ist, dann: a. Wenn x und y NaN sind, wird „true“ zurückgegeben. b Wenn x +0 und y „-0“ ist, wird „false“ zurückgegeben y ist +0, gibt false zurück; wenn x und y den gleichen numerischen Wert haben, wird true zurückgegeben Ergebnis von SameValueNonNumber(x, y). Es ist ersichtlich, dass der Unterschied zwischen === und Object.is() in der Verarbeitung von NaN und signierter 0 liegt:
NaN === NaN // false +0 === -0 // true -0 === +0 // true Object.is(NaN, NaN) // true Object.is(+0, -0) // false Object.is(-0, +0) // false
[] == ![]
[] == ![] // => [] == false
[] == false // => [] == ToNumber(false)
[] == ToNumber(false) // => [] == +0
[] == +0 // => ToPrimitive([]) == +0
"" == +0 // => ToNumber("") == +0
由ToNumber操作的第5步可知,ToNumber("")的结果是+0,所以也就是:
+0 == +0 // true
首先,左边是{},类型是对象,右边是!{},{}是真值,所以!{}是false:
{} == !{} // => {} == false
然后同样会走到x == y比较步骤的第7步,返回x == ToNumber(y)的结果,也就是:
{} == false // => {} == ToNumber(false)
由ToNumber(x)的第3步可知,ToNumber(false)返回+0:
{} == ToNumber(false) // => {} == +0
然后走到x == y比较步骤的第9步,返回ToPrimitive(x) == y的比较结果:
{} == +0 // => ToPrimitive({}) == +0
ToPrimitive({})的结果是字符串"[object Object]",原因请查看文章ECMAScript7规范中的ToPrimitive抽象操作。所以,上面等价于:
"[object Object]" == +0
然后走到x == y比较步骤的第5步,返回ToNumber(x) == y的结果:
"[object Object]" == +0 // => ToNumber("[object Object]") == +0
由ToNumber操作的第5步可知,ToNumber("[object Object]")的结果是NaN,所以也就是:
NaN == +0 // false
所以,[] == ![]的结果是true,{} == !{}的结果是false。可能有人第一次看到[] == ![]的时候,觉得这个的比较结果怎么可能是true。我觉得有时候不要感性的去认识问题,按照规定的运算步骤走一遍,结果是什么就是什么。
总结
本文讲解了JavaScript中的三种相等运算:==,===和Object.js(),希望对大家有所帮助。
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung des Inhalts von ==, === und Object.js() in js (umfassend). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!