JavaScript 中提供了比较运算符用来比较值的关系。比较运算的结果都是布尔类型值。

表 2-3 列出了常见的比较运算符。

意义 运算符

大于 >

小于 <

大于或等于 >=

小于或等于 <=

等于 ==

不等于 !=

全等于 ===

不全等于 !==

 大于小于

我们先来看大于、小于两个符号,这两个符号和数学中的表示法是相同的。例如:

8 > 5; //true

7 < 4; //false

关系运算的结果是布尔值,即判断这个关系是 true 还是 false。

继续来看“大于或等于”、“小于或等于”符号,它们在数学中的符号是≥和≤,但是在 JavaScript 中的

表示法是>=和<=。例如:

9 >= 8; //true

9 >= 9; //true

5 <= 5; //true

5 <= 4; //false

 相等和全等

如果想比较两个值是否相等,此时应该使用==或者===运算符。这里再次强调, JavaScript 中等号=表示

赋值,而并不是相等。

两个等号==运算符不比较值的类型,会进行隐式转换后比较值是否相等,称为“等于”运算符;而三个等号

===运算符,不仅比较值是否相同,也比较类型是否相同,被称作“全等于”运算符。例如:

5 == 5; //true

5 == "5"; //true 因为==运算符会进行隐式转换,值相等即可,不比较类型

5 === 5; //true

5 === "5"; //false 因为类型不同

使用 REPL 环境测试本程序

可见,数字 5 和字符串"5"在进行==比较的时候,结果是 true;而进行===比较的时候,结果是 false。这

是因为===运算符,不仅比较值的相等,而且会比较值的类型。

布尔型值在和数字类型值进行==比较的时候,true 会自动隐式转换为 1,false 会隐式转换为 0。例如:

5 == true; //false

1 == true; //true

0 == false; //true

如果上面的测试全部改为===运算符,则表示连带着类型一起比较,则结果全是 false。

运算符!=是==的反面,表示不等于;符号!==是===的反面,表示不全等于。例如:

5 != 6 //true

5 != "5" //false ,要反着想一下,5=="5"结果是 true,所以这里结果就是 false

5 !== "5" //true , 要反着想一下,5==="5"结果是 false,所以这里结果就是 true

NaN 不自等

NaN 作为一个特殊的数字类型值,它在用==比较的时候也有特殊的结果:

NaN == NaN //false

NaN === NaN //false

使用 REPL 环境测试本程序,运行结果如图 2-19 所示。这个结果令人非常惊讶,NaN 居然不等于自己。的

确,JavaScript 是这么规定的:在执行自比较之中:NaN,也只有 NaN,比较之中不等于它自己。

我们该如何验证某值是不是 NaN 呢?JavaScript 中提供了 isNaN()函数,用来检测某值是不是 NaN:

isNaN(NaN) //true

isNaN(0) //false

使用 REPL 环境测试本程序

其实用 isNaN()检测某值是不是 NaN 也是不可靠的,比如:isNaN("abc")返回的结果是 true,可是“abc”

不是 NaN。这是因为,isNaN()的机理是,只要被检测的东西用 Number()转换结果是 NaN,那么用 isNaN()检

测的结果就是 true。

所以要验证某变量 a 值是不是 NaN 的时候,要连带类型一起验证:

isNaN(a) && typeof a == "number"

表达式中的&&是且运算符,意思是在 isNaN(a)为真的同时,a 的类型必须是“number”。