3.1 ECMAScript加性运算符及表达式
ECMAScript语法中将加法(+)和减法(-)运算符统称为加性运算符,用于执行数值之间的加减算术运算。
3.1.1 加性运算符与表达式概述
关于ECMAScript语法中定义的加性运算符的内容详见表3-1。
表3-1 ECMAScript加性运算符与表达式
3.1.2 加法运算符及表达式
ECMAScript语法中规定加法运算符使用符号“+”来表示,加法(+)运算符除了可以进行正常的数值运算外,还支持对类似“NaN”和“Infinity”特殊值的运算。此外,加法(+)运算符还可以用于字符串的连接操作。
下面,来看一个应用ECMAScript加法(+)运算符的代码示例(详见源代码ch03目录中ch03-js-operator-add.html文件)。
【代码3-1】
01 <script type="text/javascript"> 02 var i = 1; 03 var j = 2; 04 var sum = i + j; 05 console.log("1 + 2 = " + sum); 06 var p = NaN; 07 var q = 123; 08 var sumNaN = p + q; 09 console.log("NaN + 123 = " + sumNaN); 10 var x = Infinity; 11 var y = 321; 12 var sumInfinity = x + y; 13 console.log("Infinity + 123 = " + sumInfinity); 14 var sumX = Infinity + Infinity; 15 console.log("Infinity + Infinity = " + sumX); 16 var sumY = -Infinity + -Infinity; 17 console.log("-Infinity + -Infinity = " + sumY); 18 var sumZ = -Infinity + Infinity; 19 console.log("-Infinity + Infinity = " + sumZ); 20 </script>
关于【代码3-1】的分析如下:
第02~05行代码定义了两个变量(i和j),并通过加法运算符(+)进行了算术运算。其中,在第04行代码中就是通过加法运算符(+)将变量(i)和变量(j)进行算术相加运算;
第06~09行代码通过加法运算符(+)对特殊值(NaN)进行了算术运算。其中,第06行代码定义变量(p),并初始化赋值为特殊值(NaN);第08行代码尝试将变量(p)与一个具体数值进行算数相加运算,并将结果保存在变量(sumNaN)中;
第10~13行代码通过加法运算符(+)对特殊值(Infinity)进行了算术运算。其中,第10行代码定义了变量(x),并初始化赋值为特殊值(Infinity);第12行代码尝试将变量(x)与一个具体数值进行算数相加运算,并将结果保存在变量(sumInfinity)中;
第14~15行代码通过加法运算符(+)对特殊值(Infinity)和特殊值(Infinity)进行算术运算,并将结果保存在变量(sumX)中;
第16~17行代码通过加法运算符(+)对特殊值(-Infinity)和特殊值(-Infinity)进行了算术运算,并将结果保存在变量(sumY)中;
第18~19行代码通过加法运算符(+)对特殊值(-Infinity)和特殊值(Infinity)进行了算术运算,并将结果保存在变量(sumZ)中。
页面效果如图3.1所示。从第09行代码的输出结果来看,特殊值(NaN)与数值相加后的结果仍为(NaN);从第13行代码的输出结果来看,特殊值(Infinity)与数值相加后的结果也仍为(Infinity)。
图3.1 ECMAScript加法运算符(+)
另外,特殊值(Infinity)和特殊值(Infinity)相加后,结果仍为特殊值(Infinity);特殊值(-Infinity)和特殊值(-Infinity)相加后,结果仍为特殊值(-Infinity);而特殊值(-Infinity)和特殊值(Infinity)相加后,结果变化为特殊值(NaN),表示不是一个有效数值。
下面,再看一个应用ECMAScript加法(+)运算符进行字符串连接操作的代码示例(详见源代码ch03目录中ch03-js-operator-add-str.html文件)。
【代码3-2】
01 <script type="text/javascript"> 02 var strA = "Hello"; 03 var strB = "EcmaScript"; 04 console.log(strA + " " + strB + "!"); 05 var i = 1; 06 var strN = "8"; 07 console.log(i + strN); 08 console.log(strN + i); 09 </script>
页面效果如图3.2所示。从第04行代码的输出结果来看,加法运算符(+)也可以用于字符串连接操作;从第07和08行代码的输出结果来看,对字符串与数值使用加法运算符(+)进行连接操作时,数值类型会被转换为字符串类型,然后进行字符串连接操作。即使字符串为数值类的字符串(如第06行代码定义的变量),也不会与数值进行算术运算,这一点需要设计人员加以重视。
图3.2 ECMAScript加法运算符(+)连接字符串
3.1.3 减法运算符及表达式
ECMAScript语法中规定减法运算符使用符号“-”来表示,减法(-)运算符除了可以进行正常的数值运算外,还支持对类似“NaN”和“Infinity”特殊值的运算。
下面,来看一个应用ECMAScript减法(-)运算符的代码示例(详见源代码ch03目录中ch03-js-operator-minus.html文件)。
【代码3-3】
01 <script type="text/javascript"> 02 var i = 2; 03 var j = 1; 04 var minusNumA = i - j; 05 console.log("2 - 1 = " + minusNumA); 06 var minusNumB = i.toString() - j; 07 console.log('"2" - 1 = ' + minusNumB); 08 var minusStr = "EcmaScript" - 123; 09 console.log('"EcmaScript" - 123 = ' + minusStr); 10 var p = NaN; 11 var q = 123; 12 var minusNaNA = p - q; 13 console.log("NaN - 123 = " + minusNaNA); 14 var minusNaNB = q - p; 15 console.log("123 - NaN = " + minusNaNB); 16 var x = Infinity; 17 var y = 321; 18 var minusInfinityA = x - y; 19 console.log("Infinity - 321 = " + minusInfinityA); 20 var minusInfinityB = y - x; 21 console.log("321 - Infinity = " + minusInfinityB); 22 var minusA = Infinity - Infinity; 23 console.log("Infinity - Infinity = " + minusA); 24 var minusB = -Infinity - -Infinity; 25 console.log("-Infinity - -Infinity = " + minusB); 26 var minusC = -Infinity - Infinity; 27 console.log("-Infinity - Infinity = " + minusC); 28 var minusD = Infinity - -Infinity; 29 console.log("Infinity - -Infinity = " + minusD); 30 </script>
关于【代码3-3】的分析如下:
第02~05行代码定义了两个变量(i和j),并通过减法运算符(-)进行了算术运算。其中,在第04行代码中就是通过减法运算符(-)将变量(i)和变量(j)进行算术相减运算;
第06~07行代码在第02~05行代码的基础上做了一点小变动,先将变量(i)转换为字符串类型,再通过减法运算符(-)与变量(j)进行算术相减运算;
第08~09行代码通过减法运算符(-)对一个字符串("ECMAScript")和数值(123)进行相减运算;
第10~15行代码通过减法运算符(-)对特殊值(NaN)进行了算术运算。其中,第10行代码定义了变量(p),并初始化赋值为特殊值(NaN);第12行和第14行代码分别尝试将变量(p)与一个具体数值进行减法运算;
第16~21行代码通过减法运算符(-)对特殊值(Infinity)进行了算术运算;其中,第16行代码定义了变量(x),并初始化赋值为特殊值(Infinity);第18行和第20行代码分别尝试将变量(x)与一个具体数值进行减法运算;
第22~23行代码通过减法运算符(-)对特殊值(Infinity)和特殊值(Infinity)进行了算术运算;
第24~25行代码通过减法运算符(-)对特殊值(-Infinity)和特殊值(-Infinity)进行了算术运算;
第26~27行代码通过减法运算符(-)对特殊值(-Infinity)和特殊值(Infinity)进行了算术运算;
第28~29行代码通过减法运算符(-)对特殊值(Infinity)和特殊值(-Infinity)进行了算术运算。
页面效果如图3.3所示。
图3.3 ECMAScript减法运算符(-)