Skip to main content

关系操作符

关系操作符执行比较两个值的操作,包括小于(<),大于(>),小于等于(<=)大于等于(>=)。这几个操作符都返回布尔值,如下所示:

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 所以要得到字母顺序比较的结果,就必须把两者转换成相同的大小写形式(全大写或者全部小写)

两个操作数都转换为小写,就能保证按照字母标表顺序判定alphabetBrick前面

let result = "Brick".toLowerCase() < "alphabet".toLowerCase(); //false

在比较两个数值字符串的时候,比如下面这个例子:

let result = "23" < "3"; //true;

这里在比较字符串"23""3"时返回 true。因为两个操作数都是字符串,所以会逐个比较它们的字符编码(字符"2"的编码时 50,而字符3的编码时 51)。 如果有一个操作数时数值就对了:

let result = "23" < 3; //false;