当我发现==-或者,我在尝试不同的条件时磕磕绊绊==+.
在JS控制台中,您可以编写:
var a = " ";
Run Code Online (Sandbox Code Playgroud)
那么以下是真的
a == " ";
Run Code Online (Sandbox Code Playgroud)
但这是错误的
a == " ";
Run Code Online (Sandbox Code Playgroud)
但是,如果你说:
a ==- " ";
Run Code Online (Sandbox Code Playgroud)
要么
a ==+ " ";
Run Code Online (Sandbox Code Playgroud)
那么这个漂亮的==-运营商是什么?
他们不是独特的运营商.
写作:
a ==- " ";
Run Code Online (Sandbox Code Playgroud)
被解析为:
(a) == (-" ");
Run Code Online (Sandbox Code Playgroud)
同样的道理==+.
表达式的评估是true因为Javascript的奇怪的类型转换规则.发生以下情况:
-(或+)运算符将其操作数转换为数字.如果它是空白字符串,则此转换的结果为0.a == (-" ")等于" " == 0.如果与之比较的类型==不同,则将其中一个(可能两个)转换为获得通用类型.在这种情况下," "左侧的转换0也是如此.0到0,其收益率true.(以上是Javascript如何得出这个结果的粗略示例,实际规则隐藏在ECMAScript规范中.您可以使用===运算符来阻止转换,并获取false比较对象的类型是否不同.)