pab*_*unk 3 javascript operators coercion
在JavaScript中这是真的:
undefined == undefined
Run Code Online (Sandbox Code Playgroud)
但这是错误的:
undefined <= undefined
Run Code Online (Sandbox Code Playgroud)
起初我认为<=运算符包含第一个,但我猜它试图将它转换为数字并且它失败了,但我没有找到任何文档来支持它.
该<=运营商强制将两个操作数为实际数字进行比较之前,如果两个操作数是原语 -而==确实不是.1 执行抽象关系比较,这是实际发生转换的地方.操作ToNumber进行上undefined这的产率NaN(参见链接表).如果你再看看步骤4C和4D从抽象关系比较,如果其中一个操作数<=被强制转换NaN,然后undefined是从抽象关系比较返回.回到第一个链接,您将在步骤7中看到:
如果r为true或未定义,则返回false.否则,返回true.
由于返回了抽象关系比较undefined,因此<=求值为false.
不太正式,您可以看到这样的比较:
const first = Number(undefined); //or +undefined
const two = Number(undefined); //this is NaN
NaN <= NaN
Run Code Online (Sandbox Code Playgroud)
既然NaN == NaN是不正确的,也不是NaN < NaN,NaN <= NaN是假的.
1 undefined == undefined基于抽象SameValueNonNumber操作返回true,如果两个操作数是相同的值而不是数字,则该操作与相等运算符一起使用.
| 归档时间: |
|
| 查看次数: |
84 次 |
| 最近记录: |