JavaScript中的关系操作符

2017-10-17  本文已影响0人  岁月静好_负重前行

当对两个值进行比较时,关系操作符(<、>、>=、<=)比较的规则和我们数学课上学习的一样。当使用了非数值比较时会遵循以下规则:

奇怪现象:

1. 两个操作数都是字符串时出现比较结果不正确

var result = "Brick " < "alpha"; //true
很多人认为,在比较字符串时候,小于的意思是字符位置靠前,大于的意思是字符位置靠后,实际上完全不是那么回事。在比较两个字符串时候,比较的是两个字符串中对应位置的字符编码值,经过比较后再返回一个布尔值。由于大写字母的编码小于小写字母,因此我们会看到上面奇怪的现象。

解决办法:

将两个操作数都转换成统一的大写或者小写。
var result = "Brick" .toLowerCase() < "alpha".toLowerCase(); //false

2. 两个操作数都是包含数字的字符串

var result = "23" < "3"; //true
由于比较的是字符编码,“2”的字符编码是50,而“3”的字符编码是51。

解决办法:

将其中一个操作数转换为数字
var result = "23" < 3; //false
此时就会正确。但是当操作数不能转换成数字的时候呢?

3.当操作数不能转换成数字时出现的奇怪现象

var result = "a" < 3;//false
既然小于不成立,按照我们的逻辑,它应该就是>=,如下:
var result = "a" >= 3; //false
按照常规,一个值不小于另一个值,则必然大于或者等于那个值,然而,在与NaN进行比较时,这两个比较操作的结果都返回了false。

在使用过程中一定要有这个意识!

上一篇 下一篇

猜你喜欢

热点阅读