2012-09-15 49 views
5

当我发现==-==+时,我正在努力尝试不同的条件。这是什么== - javascript运算符?

在JS控制台,你可以写:

var a = " "; 

再下面是真

a == " "; 

但这是错误的

a == " "; 

然而,这将是如果属实你说:

a ==- " "; 

a ==+ " "; 

那么,什么是这个漂亮的==-操作?

+2

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

回答

9

他们不是独特的运营商。

写作:

a ==- " "; 

被解析为:

(a) == (-" "); 

这同样适用于==+

由于Javascript的怪异类型转换规则,该表达式评估为true。像下面的东西发生:

  1. 一元-(或+)运营它的操作数变换为号码。如果它是空白字符串,则此转换的结果为0
  2. a == (-" ")然后相当于" " == 0。如果与==比较的类型不同,则可以将其中一个(可能是两者)转换为一个通用类型。在这种情况下,左侧的" "也会转换为0
  3. 您最终将00进行比较,结果为true

(以上是JavaScript或许是怎么得出这个结果的粗略例如,actual rules都埋在ECMAScript specification。您可以使用===操盘手,以防止转换并获得false如果类型相比,对象是不同的。)

1

这不是一个运营商。你会得到这些结果,因为-+正在将字符串转换为数字,在这种情况下,空字符串转换为数字0,然后该数字被解释为false,再加上等号运算符==会导致比较和转换出现一些问题,这就是为什么它的建议始终使用===运营商,你会得到的结果你后:

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

它只是一个==后跟一个-(或+)。

(在下文中我写"<four spaces>"指由四个空格的字符串。)

也就是说,如果你做" " ==- "<four spaces>",你比较" "到​​。由于将减法转换为整数,因此​​的计算结果为0。因此,你实际上做了" " == 0,这是真的,因为它将" "转换为一个整数用于比较。

" " == "<four spaces>"是错误的,但是,因为您正在比较两个不同的字符串。

相关问题