我编写了以下代码但没有输出。这是代码
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语句导致错误。我能知道原因吗?
答案 0 :(得分:4)
JavaScript尝试使用ToPrimitive(@RobG)将x
的值强制转换为number
。由于x
未定义,因此将返回NaN
,将false与任何值进行比较。因此它将始终返回false
。
答案 1 :(得分:1)
如果涉及使用关系运算符的表达式,Abstract Relational Comparison Algorithm用于评估操作数,则结果将转换为true
或false
。
在比较算法中,步骤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
希望这能消除歧义!