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”。