2012-09-15 15 views
5

Estaba dando tumbos intentando diferentes condiciones, cuando descubrí ==- o ==+.¿Qué es esto == - javascript operator?

En una consola JS, se puede escribir:

var a = " "; 

continuación, lo siguiente es cierto

a == " "; 

pero esto es falso

a == " "; 

Sin embargo, será cierto si usted dice:

a ==- " "; 

o

a ==+ " "; 

Entonces, ¿qué es este ingenioso ==- operador?

+2

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

Respuesta

9

No son operadores distintos.

Escritura:

a ==- " "; 

consigue analiza como:

(a) == (-" "); 

Lo mismo ocurre con ==+.

La expresión se evalúa como true debido a las reglas de conversión de tipos extraños de Javascript. Algo como ocurre lo siguiente:

  1. los unarios - (o +) operadores convierte su operando a un número. Si se trata de una cadena en blanco, el resultado de esta conversión es 0.
  2. a == (-" ") es equivalente a " " == 0. Si los tipos comparados con == son diferentes, uno (posiblemente ambos) se convierte para obtener un tipo común. En este caso, el " " en el lado izquierdo se convierte a 0 también.
  3. Acabaste comparando 0 con 0, lo que da true.

(Lo anterior es un ejemplo general de cómo Javascript podría llegar a este resultado, el actual rules están enterrados en el ECMAScript specification. Usted puede utilizar el operador === lugar para evitar las conversiones y obtener false si los tipos de la comparación los objetos son diferentes.)

1

Eso NO es un operador.Obtendrá esos resultados porque - y + están transfiriendo la cadena a un número, en este caso, una cadena vacía se lanza al número 0 que luego se interpreta como false, más el operador igual == causará algunos problemas con la comparación y la conversión, eso es por eso se recomienda siempre usar el operador === y obtendrá los resultados que está buscando:

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

es simplemente una == seguido de un - (o +).

(En la siguiente escribo "<four spaces>" en el sentido de la cadena que consta de cuatro espacios.)

Es decir, si lo hace " " ==- "<four spaces>", te comparo a " "-"<four spaces>". -"<four spaces>" evalúa a 0, ya que la aplicación de los minus convierte a entero. Por lo tanto, realmente hace " " == 0, que es verdadero, ya que convierte el " " en un número entero para la comparación.

" " == "<four spaces>" es falso, sin embargo, ya que está comparando dos cadenas diferentes.