stackoverflow - number is nan javascript




Wie ist 1==[1] in Javascript? (2)

Wenn ein Objekt mit einer Zahl oder einem String verglichen wird, versucht JavaScript, den Standardwert für das Objekt zurückzugeben. Operatoren versuchen, das Objekt mithilfe der Methoden valueOf und toString der Objekte in einen primitiven Wert, einen valueOf oder Number Wert, zu konvertieren. Wenn dieser Versuch, das Objekt zu konvertieren, fehlschlägt, wird ein Laufzeitfehler generiert. [ Ref ]

var a = 1;
var b = [1];
//What is happening when `(a==b)`
//typeof a;   ==> number
//typeof b;  ==>object
//Object is converted to Primitive using `valueOf` and `toString` methods of the objects
var val = b.valueOf().toString();
console.log('Values after conversion is: ' + val + '  And typeof converted value is:  ' + typeof val);
//typeof val; ==> string
//a == b; will be evaluated as `true` because `'1' == 1` hence..
console.log(a == b); //'1'==1 ==> true

Da der konvertierte Wert vom Typ String , wird beim Vergleichen einer number und einer string die string in einen number konvertiert und dann der strikte Vergleich angewendet.

Diese Frage hat hier bereits eine Antwort:

Diese Frage wurde mir kürzlich in einem Interview gestellt.

 var a = 1;
 var b = [1];

Was wird a == b; Rückkehr.

Als ich das auf meiner Chrome-Browserkonsole überprüft habe, habe ich das bekommen.

var a = 1;
var b = [1];
a == b;
true

Ich habe auch überprüft

var a = 1;
var b =(1);
a == b;
true

Ich weiß, dass b in einem Array der Größe 1 ist. Bedeutet das, dass die Größe des Arrays b zugewiesen ist. Ich bin ziemlich verwirrt. Kann mir jemand die Logik erklären?


Dies liegt an der Art des Vergleichs.

In Javascript kann man zum Vergleich entweder == oder === . Im Falle eines Triple Equals ist dies Gleichheit ohne Typzwang , mit anderen Worten, es ist ein strenger Vergleich.

Gleichstellung mit Typzwang

Umgekehrt bedeutet dies, dass die Verwendung des Operanden double equals eine Gleichheit mit der Typumwandlung ist.

Was bedeutet das?

Einfach ausgedrückt, bedeutet dies, dass Javascript eingebaute Methoden verwendet, um den Wert in einen primitiven Typ zu konvertieren, der zum Vergleich bereit ist. .valueOf() Methoden sind insbesondere .valueOf() und .toString() .

Hier sind einige Beispiele:

0 == false   // true, auto type coercion
0 === false  // false, because they are of a different type
1 == "1"     // true, auto type coercion
1 === "1"    // false, because they are of a different type

Ergo:

1 == [1] // true
1 === [1] // false, because they are of a different type




coercion