6

当我发现==-, 或==+.

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

var a = " ";

那么以下是真的

a == " ";

但这是错误的

a == "    ";

但是,如果您说:

a ==- "   ";

或者

a ==+ "   ";

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

4

3 回答 3

9

他们不是不同的运营商。

写作:

a ==- " ";

被解析为:

(a) == (-" ");

也是如此==+

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

  1. 一元-(或+)运算符将其操作数转换为数字。如果它是一个空白字符串,则此转换的结果是0.
  2. a == (-" ")则等价于" " == 0。如果比较的类型==不同,一个(可能两者),被转换以获得一个共同的类型。在这种情况下," "左侧的0也将转换为。
  3. 您最终会比较00从而产生true

(上面是 Javascript 如何得出此结果的粗略示例,实际规则隐藏在ECMAScript 规范中。如果比较对象的类型不同,您可以使用===运算符来防止转换并获取。)false

于 2012-09-15T22:22:52.517 回答
3

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

(下面我写"<four spaces>"的意思是由四个空格组成的字符串。)

也就是说,如果你这样做" " ==- "<four spaces>",你将" "与进行比较-"<four spaces>"-"<four spaces>"计算结果为0,因为应用减号会转换为整数。因此,您实际上是这样做" " == 0的,这是真的,因为它将 转换" "为整数以进行比较。

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

于 2012-09-15T22:24:59.953 回答
1

那不是运算符。你得到这些结果是因为-and+正在将字符串转换为一个数字,在这种情况下,一个空字符串转换0为然后被解释为的数字false,加上等号运算符==会在比较和转换时造成一些麻烦,这就是为什么建议总是使用===运算符,您将获得所需的结果:

console.log(a === ' '); // true
console.log(a === '   '); // false
console.log(a === -'   '); // false
console.log(a === +'   '); // false
于 2012-09-15T22:24:04.500 回答