2016-03-22 14 views

Antwort

5

Basierend auf abstract equality comparison algorithm ersten Code wird wie unten, 1

Schritt bewertet werden: ToNumber([]) == true

Schritt 2: ToPrimitive([]) == true

(ToNumber() werden ToPrimitve() nennen, wenn das übergebene Argument ist ein object)

Schritt 3: "" == true

Schritt 4: 0 == true

Schritt 5: false == true

Schritt 6: false

Und im zweiten Fall [] ist ein truthy Wert, so wird if([]) ausgewertet werden Um immer wahr zu sein, wird hier [] nicht als primitiv konvertiert. Der abstrakte Gleichheitsvergleichsalgorithmus kommt ins Spiel, wenn Sie den Operator == verwenden.

Ein weiteres besseres Beispiel wäre

var x = [] || "hello"; 
console.log(x); // [] 

Da [] ein truthy Wert ist, werden x mit [] gesetzt würde nicht "hello"

+2

ToPrimitive wird aufgerufen, wenn der Typ von y entweder Zeichenfolge oder Zahl ist. Dies ist im Grunde der letzte Punkt 10, da es keine der ersten 9 Bedingungen erfüllt. Du hast den richtigen Teil der Spezifikation angegeben. +1 – gurvinder372

+1

@ gurvinder372 Danke für das Zeigen. :) –

+0

ich verstehe nicht eine Sache ... warum ruft es ToNumber-Methode, wenn wir mit boolean vergleichen? –

0

Wenn Sie nur eine Variable als Bedingung verwenden (ohne Vergleichsoperatoren) , Javascript wird es in Boolean unter Verwendung der Boolean() Funktion umwandeln:

http://www.w3schools.com/js/js_booleans.asp

In Ihrem Fall, Boolean([]) = true so kehrte es als wahr zurück.

Verwandte Themen