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

use*_*951 6 javascript

当我发现==-或者,我在尝试不同的条件时磕磕绊绊==+.

在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)

那么这个漂亮的==-运营商是什么?

mil*_*ose 9

他们不是独特的运营商.

写作:

a ==- " ";
Run Code Online (Sandbox Code Playgroud)

被解析为:

(a) == (-" ");
Run Code Online (Sandbox Code Playgroud)

同样的道理==+.

表达式的评估是true因为Javascript的奇怪的类型转换规则.发生以下情况:

  1. 一元-(或+)运算符将其操作数转换为数字.如果它是空白字符串,则此转换的结果为0.
  2. a == (-" ")等于" " == 0.如果与之比较的类型==不同,则将其中一个(可能两个)转换为获得通用类型.在这种情况下," "左侧的转换0也是如此.
  3. 你最终比较00,其收益率true.

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