当我发现==-
, 或==+
.
在 JS 控制台中,您可以编写:
var a = " ";
那么以下是真的
a == " ";
但这是错误的
a == " ";
但是,如果您说:
a ==- " ";
或者
a ==+ " ";
那么这个漂亮的==-
运算符是什么?
当我发现==-
, 或==+
.
在 JS 控制台中,您可以编写:
var a = " ";
那么以下是真的
a == " ";
但这是错误的
a == " ";
但是,如果您说:
a ==- " ";
或者
a ==+ " ";
那么这个漂亮的==-
运算符是什么?
他们不是不同的运营商。
写作:
a ==- " ";
被解析为:
(a) == (-" ");
也是如此==+
。
true
由于 Javascript 的奇怪类型转换规则,表达式的计算结果为。会发生以下情况:
-
(或+
)运算符将其操作数转换为数字。如果它是一个空白字符串,则此转换的结果是0
.a == (-" ")
则等价于" " == 0
。如果比较的类型==
不同,一个(可能两者),被转换以获得一个共同的类型。在这种情况下," "
左侧的0
也将转换为。0
,0
从而产生true
。(上面是 Javascript 如何得出此结果的粗略示例,实际规则隐藏在ECMAScript 规范中。如果比较对象的类型不同,您可以使用===
运算符来防止转换并获取。)false
它只是一个==
后跟一个-
(或+
)。
(下面我写"<four spaces>"
的意思是由四个空格组成的字符串。)
也就是说,如果你这样做" " ==- "<four spaces>"
,你将" "
与进行比较-"<four spaces>"
。-"<four spaces>"
计算结果为0
,因为应用减号会转换为整数。因此,您实际上是这样做" " == 0
的,这是真的,因为它将 转换" "
为整数以进行比较。
" " == "<four spaces>"
但是,这是错误的,因为您正在比较两个不同的字符串。
那不是运算符。你得到这些结果是因为-
and+
正在将字符串转换为一个数字,在这种情况下,一个空字符串转换0
为然后被解释为的数字false
,加上等号运算符==
会在比较和转换时造成一些麻烦,这就是为什么建议总是使用===
运算符,您将获得所需的结果:
console.log(a === ' '); // true
console.log(a === ' '); // false
console.log(a === -' '); // false
console.log(a === +' '); // false