当我发现==-
或==+
时,我正在努力尝试不同的条件。这是什么== - javascript运算符?
在JS控制台,你可以写:
var a = " ";
再下面是真
a == " ";
但这是错误的
a == " ";
然而,这将是如果属实你说:
a ==- " ";
或
a ==+ " ";
那么,什么是这个漂亮的==-
操作?
当我发现==-
或==+
时,我正在努力尝试不同的条件。这是什么== - javascript运算符?
在JS控制台,你可以写:
var a = " ";
再下面是真
a == " ";
但这是错误的
a == " ";
然而,这将是如果属实你说:
a ==- " ";
或
a ==+ " ";
那么,什么是这个漂亮的==-
操作?
他们不是独特的运营商。
写作:
a ==- " ";
被解析为:
(a) == (-" ");
这同样适用于==+
。
由于Javascript的怪异类型转换规则,该表达式评估为true
。像下面的东西发生:
-
(或+
)运营它的操作数变换为号码。如果它是空白字符串,则此转换的结果为0
。a == (-" ")
然后相当于" " == 0
。如果与==
比较的类型不同,则可以将其中一个(可能是两者)转换为一个通用类型。在这种情况下,左侧的" "
也会转换为0
。0
与0
进行比较,结果为true
。(以上是JavaScript或许是怎么得出这个结果的粗略例如,actual rules都埋在ECMAScript specification。您可以使用===
操盘手,以防止转换并获得false
如果类型相比,对象是不同的。)
这不是一个运营商。你会得到这些结果,因为-
和+
正在将字符串转换为数字,在这种情况下,空字符串转换为数字0
,然后该数字被解释为false
,再加上等号运算符==
会导致比较和转换出现一些问题,这就是为什么它的建议始终使用===
运营商,你会得到的结果你后:
console.log(a === ' '); // true
console.log(a === ' '); // false
console.log(a === -' '); // false
console.log(a === +' '); // false
它只是一个==
后跟一个-
(或+
)。
(在下文中我写"<four spaces>"
指由四个空格的字符串。)
也就是说,如果你做" " ==- "<four spaces>"
,你比较" "
到。由于将减法转换为整数,因此的计算结果为0
。因此,你实际上做了" " == 0
,这是真的,因为它将" "
转换为一个整数用于比较。
" " == "<four spaces>"
是错误的,但是,因为您正在比较两个不同的字符串。
相关:http://stackoverflow.com/questions/1642028/what-is-the-name-of-this-operator –