2012-09-15 15 views
5

Ich stolperte um verschiedene Bedingungen zu versuchen, als ich oder ==+ entdeckte.Was ist das == - Javascript-Operator?

In einer JS-Konsole können Sie schreiben:

var a = " "; 

dann ist die folgende

a == " "; 

wahr, aber das ist falsch

a == " "; 

Allerdings wird es wahr sein, wenn Sie sagen:

a ==- " "; 

oder

a ==+ " "; 

Was also ist der raffinierte ==- Operator?

+2

In Verbindung stehend: http://stackoverflow.com/questions/1642028/what-is-the-name-of-this-operator –

Antwort

9

Sie sind nicht verschiedene Operatoren.

Schreiben:

a ==- " "; 

wird analysiert als:

(a) == (-" "); 

Das gleiche gilt für ==+ geht.

Der Ausdruck ergibt true wegen der seltsamen Konvertierungsregeln von Javascript. So etwas wie die folgenden Ereignisse eintritt:

  1. die unären - (oder +) Operatoren konvertiert ihre Operanden in eine Zahl. Wenn es sich um eine leere Zeichenfolge handelt, lautet das Ergebnis dieser Konvertierung 0.
  2. a == (-" ") entspricht dann " " == 0. Wenn Typen, die mit == verglichen werden, unterschiedlich sind, wird einer (möglicherweise beide) konvertiert, um einen gemeinsamen Typ zu erhalten. In diesem Fall wird die " " auf der linken Seite auch zu 0 konvertiert.
  3. Sie vergleichen 0 mit 0, was true ergibt.

(Die oben ist ein grobes Beispiel dafür, wie Javascript zu diesem Ergebnis kommen könnte, die actual rules im ECMAScript specification begraben sind. Sie können den === Operator verwenden, anstatt die Konvertierungen zu verhindern und false wenn die Typen des im Vergleich zu bekommen Objekte sind unterschiedlich.)

1

Das ist kein Operator.Sie erhalten diese Ergebnisse, weil - und + die Zeichenfolge auf eine Zahl wirft, in diesem Fall wird eine leere Zeichenfolge an die Nummer 0 umgewandelt, die dann als false interpretiert wird, und der Gleichheitsoperator == wird einige Probleme mit Vergleich und Casting verursachen warum es empfohlen wird, immer den === Operator zu verwenden, und Sie werden die Ergebnisse erhalten Sie nach:

console.log(a === ' '); // true 
console.log(a === ' '); // false 
console.log(a === -' '); // false 
console.log(a === +' '); // false 
3

es ist einfach eine == gefolgt von einem - (oder +).

(Im Folgenden schreibe ich "<four spaces>" die Zeichenfolge bedeuten, bestehend aus vier Räumen.)

Das heißt, wenn Sie " " ==- "<four spaces>" tun, vergleichen Sie " "--"<four spaces>". -"<four spaces>" wertet 0 aus, da das Minus auf Ganzzahl konvertiert wird. Sie tun also tatsächlich " " == 0, was wahr ist, da es die " " in eine ganze Zahl für den Vergleich konvertiert.

" " == "<four spaces>" ist jedoch falsch, da Sie zwei verschiedene Zeichenfolgen vergleichen.