关系操作符
关系操作符执行比较两个值的操作,包括小于(<),大于(>),小于等于(<=)和大于等于(>=)。这几个操作符都返回布尔值,如下所示:
let result1 = 5 > 3; // true
let result2 = 5 < 3; // false
与ECMAScript中的其他操作符一样,在将他们应用到不同数据类型的时候也会发生类型转换和其他行为。
- 如果操作数都是数值,则执行数值比较。
- 如果有一个操作数是
NaN,无论是大于还是等于结果都是false。 - 如果操作数都是
字符串,则逐个比较字符串对应的编码。 - 如果有任一操作数是
数值,则将另一个操作数转换为数值,在执行数值比较。 - 如果有任一操作数是
布尔值,则将其转换为数值在执行比较 - 如果任一操作数是一个
对象,则调用valueOf()方法 如果返回的是一个原始值(比如数字)并按照上述规则转换返回的值。 如果valueOf()方法返回的仍然是一个对象 则调用toString()方法 在按照字符串的规则转换
因为在使用关系操作符比较两个字符串的时候,会比较字符串中对应的编码,这些编码是数值格式。比较完之后,会返回布尔值。
let result = "Brick" < "alphabet"; //true
这里字母 B 的编码是66,字母a的编码是 97 所以要得到字母顺序比较的结果,就必须把两者转换成相同的大小写形式(全大写或者全部小写)。
两个操作数都转换为小写,就能保证按照字母标表顺序判定alphabet在Brick前面
let result = "Brick".toLowerCase() < "alphabet".toLowerCase(); //false
在比较两个数值字符串的时候,比如下面这个例子:
let result = "23" < "3"; //true;
这里在比较字符串"23"和"3"时返回 true。因为两个操作数都是字符串,所以会逐个比较它们的字符编码(字符"2"的编码时 50,而字符3的编码时 51)。
如果有一个操作数时数值就对了:
let result = "23" < 3; //false;