15天学会JavaScript(视频教学版)
上QQ阅读APP看书,第一时间看更新

3.4 ECMAScript关系运算符及表达式

在ECMAScript语法中,对两个数值执行比较运算的运算符统称为关系运算符。关系运算符一般包括小于、大于、小于等于和大于等于这几种,关系运算符表达式均会返回一个布尔值。下面对这些关系运算符逐一进行介绍。

3.4.1 关系运算符与表达式概述

关于ECMAScript语法中定义的关系运算符的内容详见表3-4。

表3-4 ECMAScript关系运算符与表达式

3.4.2 数值关系运算符表达式

在ECMAScript语法中,关系运算符主要应用于数值的比较运算。对于每一个数值关系运算符表达式均会返回一个布尔值,通过返回的布尔值来判断数值比较的结果。

下面,来看一个数值关系运算符表达式的代码示例(详见源代码ch03目录中ch03-js-operator-relation-number.html文件)。

【代码3-13】

   01  <script type="text/javascript">
   02       var bR_1 = 2 > 1;
   03       console.log("2 > 1 = " + bR_1);
   04       var bR_2 = 2 < 1;
   05       console.log("2 < 1 = " + bR_2);
   06       var bR_3 = 2 >= 1;
   07       console.log("2 >= 1 = " + bR_3);
   08       var bR_4 = 2 <= 1;
   09       console.log("2 <= 1 = " + bR_4);
   10  </script>

关于【代码3-13】的分析如下:

这段代码主要就是对数值1和2分别使用了大于(>)、小于(<)、大于等于(>=)和小于等于(<=)这四个关系运算符进行了比较运算。

页面效果如图3.15所示。数值关系运算符表达式输出的结果与预期完全符合,与我们在数学中学习到的内容是一致的。

图3.15 ECMAScript关系运算符(数值比较)

3.4.3 字符串关系运算符表达式

在ECMAScript语法中,关系运算符还可以应用于字符串的比较运算,这也是计算机编程语言的一大特点。对字符串也可以进行比较运算,似乎超出了我们的知识范畴,与我们在数学中学习的内容有些矛盾。不过对于学习过C语言或Java语言的读者来说,字符串比较运算并不陌生,这是因为在计算机编程语言中,关系运算符比较的是字符在计算机中的编码(ASCII编码)。

下面,来看一个字符串关系运算符表达式的代码示例(详见源代码ch03目录中ch03-js-operator-relation-string.html文件)。

【代码3-14】

   01  <script type="text/javascript">
   02       var bR_str_1 = "A" > "B";
   03       console.log("A > B = " + bR_str_1);
   04       var bR_str_2 = "a" < "b";
   05       console.log("a < b = " + bR_str_2);
   06       var bR_str_3 = "A" > "a";
   07       console.log("A > a = " + bR_str_3);
   08       var bR_str_4 = "apple" < "banana";
   09       console.log("apple < banana = " + bR_str_4);
   10       var bR_str_5 = "apple" < "Banana";
   11       console.log("apple < Banana = " + bR_str_5);
   12  </script>

关于【代码3-14】的分析如下:

这段代码主要就是对字符串分别使用了大于(>)和小于(<)关系运算符进行了比较运算。页面效果如图3.16所示。

图3.16 ECMAScript关系运算符(字符串比较)

第04行代码尝试对小写字母“a”和“b”进行比较运算("a" < "b");从第05行代码输出的结果可以看到,关系运算符表达式("a" < "b")的返回值为true,说明小写字母“a”小于小写字母“b”(比较ASCII编码);

第06行代码尝试对大写字母“A”和小写字母“a”进行比较运算("A" > "a");从第07行代码输出的结果可以看到,关系运算符表达式("A" > "a")的返回值为false,说明大写字母“A”小于小写字母“a”(比较ASCII编码),而不是返回大写字母“A”等于小写字母“a”的结果;

第08行代码尝试对小写单词“apple”和小写单词“banana”进行了比较运算("apple" <"banana");从第09行代码输出的结果可以看到,关系运算符表达式("apple" < "banana")的返回值为true,说明小写单词“apple”的首字母“a”小于小写单词“banana”的首字母“b”(比较ASCII编码);

第10行代码尝试对小写单词“apple”和大写单词“Banana”进行了比较运算("apple" <"Banana");从第11行代码输出的结果可以看到,关系运算符表达式("apple" < "Banana")的返回值为false,说明小写单词“apple”的首字母“a”大于大写单词“Banana”的首字母“B”(比较ASCII编码)。

3.4.4 数字与字符串关系运算符表达式

在ECMAScript语法中,既然关系运算符可以应用于字符串的比较运算,那么对于数值和字符串的比较运算也是支持的。

下面,来看一个数值与字符串关系运算符表达式的代码示例(详见源代码ch03目录中ch03-js-operator-relation-num-str.html文件)。

【代码3-15】

   01  <script type="text/javascript">
   02       var bR_num_str_1 = "11" > "2";
   03       console.log("'11' > '2' = " + bR_num_str_1);
   04       var bR_num_str_2 = "11" > 2;
   05      console.log("'11' > 2 = " + bR_num_str_2);
   06      var bR_num_str_3 = "a" > 2;
   07      console.log("'a' > 2 = " + bR_num_str_3);
   08      var bR_num_str_4 = "a" <= 2;
   09      console.log("'a' <= 2 = " + bR_num_str_4);
   10  </script>

关于【代码3-15】的分析如下:

这段代码主要就是对数值和字符串分别使用了大于(>)和小于等于(<=)关系运算符进行了比较运算。

页面效果如图3.17所示。

图3.17 ECMAScript关系运算符(数值与字符串比较)

第02行代码尝试对数值型字符串“11”和字符串“2”进行比较运算("11" > "2");从第03行代码输出的结果可以看到,关系运算符表达式("11" > "2")的返回值为false,说明字符串“11”的首字符“1”是小于字符串“2”的(比较ASCII编码);

第04行代码尝试对数值型字符串“11”和数值2进行比较运算("11" > 2);从第05行代码输出的结果可以看到,关系运算符表达式("11" > 2)的返回值为true,这是因为ECMAScript语法规定了当字符串与数值进行关系运算时,字符串会先转换成数值,再与数值进行比较运算;

第06行代码尝试对数值型字符串“a”和数值2进行比较运算("a" > 2);从第07行代码输出的结果可以看到,关系运算符表达式("a" > 2)的返回值为false,这是因为字符串“a”转换成数值后返回值是NaN;

而第08行代码尝试对数值型字符串“a”和数值2进行比较运算("a" <= 2);从第09行代码输出的结果可以看到,关系运算符表达式("a" <= 2)的返回值为false,这同样是因为字符串“a”不能合理转换成数值,返回值为NaN。

从第07行和第09行代码输出的结果来看,原始值NaN在与数值进行关系运算时,返回的结果均是false,这也正是ECMAScript语法中所规定的。