1

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

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 语句导致错误。我能知道原因吗?

4

3 回答 3

4

JavaScript 尝试将值转换xnumber使用 ToPrimitive (@RobG)。由于x未定义,这将返回NaN将 false 与任何值进行比较。所以它总会回来false

于 2012-10-19T10:15:57.260 回答
1

正如评论中提到的@jAndy,您不能将undefined关键字视为 value/Instanceundefined不是数字类型。相反,它undefinedGlobal Object

这就是表达式if(undefined {operator} {operand value})计算结果为假的原因。但考虑代码if(undefined == undefined)返回true

希望这能消除歧义!

于 2012-10-19T10:28:48.680 回答
1

在涉及使用关系运算符的表达式时,抽象关系比较算法用于计算操作数,然后将结果转换为trueor false

在比较算法中,步骤 3a 转换undefinedNaN。在步骤 3c 中,它说与NaN任何东西进行比较都会返回undefined

在说小于运算符的步骤中,结果undefined被转换为假。

因此,对于OP 中的iffalse语句,每个测试都会返回,因为它们都是关系运算符,都使用抽象关系比较算法,并且其中一个操作数是undefined.

于 2012-10-19T10:18:20.363 回答