这是什么== - javascript运算符?

时间:2012-09-15 22:19:28

标签: javascript

当我发现==-==+时,我在尝试不同条件时遇到了绊脚石。

在JS控制台中,您可以写:

var a = " ";

然后以下是真的

a == " ";

但这是假的

a == "    ";

但是,如果你这样说:

a ==- "   ";

a ==+ "   ";

那么这个漂亮的==-运算符是什么?

3 个答案:

答案 0 :(得分:9)

他们不是独特的运营商。

写作:

a ==- " ";

被解析为:

(a) == (-" ");

==+同样如此。

由于Javascript的怪异类型转换规则,表达式的计算结果为true。发生以下情况:

  1. 一元-(或+)运算符将其操作数转换为数字。如果它是空白字符串,则此转换的结果为0
  2. a == (-" ")则等同于" " == 0。如果与==进行比较的类型不同,则将其中一个(可能两者)转换为获得通用类型。在这种情况下,左侧的" "也会转换为0
  3. 您最终将00进行比较,结果为true
  4. (以上是Javascript可能会出现此结果的粗略示例,actual rules隐藏在ECMAScript specification中。您可以使用===运算符来阻止转换如果比较对象的类型不同,则获取false。)

答案 1 :(得分:3)

只需==后跟-(或+)。

(在下文中,我写"<four spaces>"表示由四个空格组成的字符串。)

也就是说,如果您执行" " ==- "<four spaces>",则会将" "-"<four spaces>"进行比较。 -"<four spaces>"评估为0,因为将减号转换为整数。因此,你实际上做" " == 0,这是真的,因为它将" "转换为整数进行比较。

但是,

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

答案 2 :(得分:1)

那不是运营商。您得到这些结果是因为-+正在将字符串转换为数字,在这种情况下,空字符串会转换为数字0,然后将其解释为false加上等于运算符==会导致比较和转换出现问题,这就是为什么建议总是使用===运算符,然后你会得到你想要的结果:

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