javascript – null和undefined不一致的比较

我很想知道为什么
null == undefined

返回true但是

null >= undefined

返回false

包含大于运算符的值是否会以不同方式强制执行?

解决方法

tl; dr> =在这种情况下最终将两个参数强制转换为数字:undefined被强制转换为NaN,而null被强制转换为0,这是不相等的.对于==,规范明确定义null == undefined为true.

事实上,这些值在两种情况下都会被强制执行(从某种意义上说,至少 – = =的情况是特殊的).让我们在规范的帮助下一次考虑一个.

> =运算符的algorithm使用“Abstract Relational Comparison Algorithm”,其由其他关系运算符共享.从规范中的描述,我们看到该算法执行以下操作:

>将参数转换为基元(已经为null和undefined).
>检查参数是否为字符串(它们不是).
>如果它们不是字符串,则算法将参数转换为数字(请参阅步骤3.a.和3.b.)并执行与结果的比较.

最后一点是关键.从ToNumber table开始,我们看到undefined被强制转换为NaN,算法认为任何与NaN的比较都是假的(参见步骤3.c.和3.d.).因此,null> = undefined是false.

对于另一种情况,==,故事实际上要简单得多:spec explicitly states null == undefined为真,作为“抽象等式比较算法”的一部分(参见步骤2.和3).因此,null == undefined为true.

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...