学习JavaScript时有趣的结果。但我不知道为什么

时间:2012-10-19 10:11:03

标签: javascript jquery angularjs

我编写了以下代码但没有输出。这是代码

var a1 = undefined;
var a2 = 5;
if(a1 > a2)
    alert(1);
if(a1 < a2)
    alert(2);
if(a1 >= a2)
    alert(3);
if(a1 <= a2)
    alert(4);

没有出现警告框,这意味着if语句导致错误。我能知道原因吗?

3 个答案:

答案 0 :(得分:4)

JavaScript尝试使用ToPrimitive(@RobG)将x的值强制转换为number。由于x未定义,因此将返回NaN,将false与任何值进行比较。因此它将始终返回false

答案 1 :(得分:1)

如果涉及使用关系运算符的表达式,Abstract Relational Comparison Algorithm用于评估操作数,则结果将转换为truefalse

在比较算法中,步骤3a将undefined转换为NaN。在步骤3c中,它表示将NaN与任何内容进行比较会返回 undefined

在说出Less-than Operator的步骤中,undefined的结果将转换为false。

因此对于OP中的 if 语句,每个测试都返回false,因为它们都是关系运算符,它们都使用抽象关系比较算法,其中一个操作数是{{1 }}

答案 2 :(得分:1)

正如@jAndy在评论中提到的,您不能将undefined关键字视为值/实例undefined不是数字类型。相反,它是undefined

的属性Global Object的特殊值

这就是表达式if(undefined {operator} {operand value})评估为false的原因。但请考虑代码if(undefined == undefined)返回true

希望这能消除歧义!