我很想知道为什么
null == undefined
返回true但
null >= undefined
返回false
是否包含大于运算符以不同方式强制值?
我很想知道为什么
null == undefined
返回true但
null >= undefined
返回false
是否包含大于运算符以不同方式强制值?
tl; dr在这种>=情况下,最终将两个参数强制转换为数字:undefined被强制转换为,NaN而null被强制转换为0,它们不相等。对于==,规范明确定义null == undefined为true。
事实上,这些值在这两种情况下都会被强制转换(至少在某种意义上 - 的情况==是特殊的)。让我们在规范的帮助下一次一个地考虑它们。
运算符的算法>=使用“抽象关系比较算法”,其他关系运算符共享该算法。从规范中的描述中,我们看到该算法执行以下操作:
null并且undefined已经是)。Strings(它们不是)。Strings,则算法将参数转换为数字(参见步骤 3.a. 和 3.b.)并与结果进行比较。最后一点是关键。从ToNumber表 中,我们看到它undefined被强制转换为NaN,并且算法认为任何与 的比较NaN都是虚假的(参见步骤 3.c. 和 3.d.)。因此,null >= undefined是false。
对于另一种情况,==故事实际上要简单得多:规范明确指出这null == undefined是“抽象平等比较算法”的一部分(参见步骤 2. 和 3.)。因此,null == undefined是true。
在 JS==运算符中,将值强制为相同类型进行比较1=="1",true. 使用===运算符进行精确类型匹配