购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

3.2 ECMAScript乘性运算符及表达式

ECMAScript语法中将乘法(*)、除法(/)和模数(%)运算符统一称为乘性运算符,用于执行数值之间的乘除和取余算术运算。

3.2.1 乘性运算符与表达式概述

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

表3-2 ECMAScript乘性运算符与表达式

3.2.2 乘法运算符及表达式

ECMAScript语法中规定乘法运算符使用符号“*”来表示,乘法(*)运算符除了可以进行正常的数值运算外,还支持对类似“NaN”和“Infinity”特殊值的运算。

下面,来看一个应用ECMAScript乘法(*)运算符的代码示例(详见源代码ch03目录中ch03-js-operator-multiple.html文件)。

【代码3-4】

   01  <script type="text/javascript">
   02       var i = 123;
   03       var j = 321;
   04       var sum = i * j;
   05       console.log("123 * 321 = " + sum);
   06       var a = 1e1001;
   07       var sumAA = a * a;
   08       console.log("1e1001 * 1e1001 = " + sumAA);
   09       var sumAB = -a * a;
   10       console.log("-1e1001 * 1e1001 = " + sumAB);
   11       var p = NaN;
   12       var q = 5;
   13       var sumNaN = p * q;
   14       console.log("NaN * 5 = " + sumNaN);
   15       var x = Infinity;
   16       var y = 0;
   17       var sumInfinity = x * y;
   18       console.log("Infinity * 0 = " + sumInfinity);
   19       var z = 1;
   20       var sumZ = x * z;
   21       console.log("Infinity * 1 = " + sumZ);
   22       var zz = -1;
   23       var sumZZ = x * zz;
   24       console.log("Infinity * (-1) = " + sumZZ);
   25       var sumSum = Infinity * Infinity;
   26       console.log("Infinity * Infinity = " + sumSum);
   27  </script>

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

第02~05行代码定义了两个变量(i和j),并通过乘法运算符(*)进行了算术运算。其中,在第04行代码中通过乘法运算符(*)将变量(i)和变量(j)进行了算术相乘运算;

第06~10行代码通过乘法运算符(*)进行了无穷大的计算。其中,第06行代码定义了一个变量(a),并初始化为科学记数法数值(1e1001);第07行和第09行代码使用乘法运算符(*)分别计算了数值(1e1001)的正负平方值;

第11~14行代码分别对特殊值(NaN)进行了算术运算。其中,第11行代码定义了变量(p),并初始化赋值为特殊值(NaN);第13行代码尝试将变量(p)与一个具体数值进行算术相乘运算;

第15~24行代码通过乘法运算符(*)对特殊值(Infinity)进行了算术运算。其中,第15行代码定义了变量(x),并初始化赋值为特殊值(Infinity);第17行代码尝试将变量(x)与数值(0)进行算术相乘运算;第20行代码尝试将变量(x)与非零数值(1)进行算术相乘运算;第23行代码尝试将变量(x)与非零数值(-1)进行算术相乘运算;

第25~26行代码通过乘法运算符(*)对特殊值(Infinity)和特殊值(Infinity)进行了算术运算,并将结果保存在变量(sumSum)中。

页面效果如图3.4所示。

图3.4 ECMAScript乘法运算符(*)

3.2.3 除法运算符及表达式

ECMAScript语法中规定除法运算符使用符号“/”来表示,除法(/)运算符除了可以进行正常的数值运算外,还支持对类似“NaN”和“Infinity”特殊值的运算。

下面,来看一个应用ECMAScript除法(/)运算符的代码示例(详见源代码ch03目录中ch03-js-operator-divide.html文件)。

【代码3-5】

   01  <script type="text/javascript">
   02      var i = 128;
   03      var j = 16;
   04      var sum = i / j;
   05      console.log("128 / 16 = " + sum);
   06      var a = 1e-1001;
   07      var sumAA = 1 / a;
   08      console.log("1 / 1e-1001 = " + sumAA);
   09      var sumAB = -1 / a;
   10      console.log("-1 / 1e-1001 = " + sumAB);
   11      var p = NaN;
   12      var q = 2;
   13      var sumNaNA = p / q;
   14      console.log("NaN / 2 = " + sumNaNA);
   15      var sumNaNB = q / p;
   16      console.log("2 / NaN = " + sumNaNB);
   17      var sumZero = 2 / 0;
   18      console.log("2 / 0 = " + sumZero);
   19      var sumInfinityA = Infinity / 2;
   20      console.log("Infinity / 2 = " + sumInfinityA);
   21      var sumInfinityB = Infinity / (-2);
   22      console.log("Infinity / -2 = " + sumInfinityB);
   23      var sumInfinityZero = Infinity / 0;
   24      console.log("Infinity / 0 = " + sumInfinityZero);
   25      var sumSum = Infinity / Infinity;
   26      console.log("Infinity / Infinity = " + sumSum);
   27  </script>

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

第02~05行代码定义了两个变量(i和j),并通过除法运算符(/)进行了算术运算。其中,在第04行代码中通过除法运算符(/)将变量(i)和变量(j)进行了算术除法运算;

第06~10行代码通过除法运算符(/)进行了生成无穷大的计算。其中,第06行代码定义了一个变量(a),并初始化为科学记数法数值(1e-1001);第07行和第09行代码使用除法运算符(/)分别计算了数值(±1)除以数值(1e-1001)的结果;

第11~16行代码分别对特殊值(NaN)进行了算术运算。其中,第11行代码定义了变量(p),并初始化赋值为特殊值(NaN);第13行代码尝试将变量(p)与一个具体数值(2)进行算术除法运算;第15行代码尝试将一个具体数值(2)与变量(p)进行算术除法运算;

第17~18行代码通过除法运算符(/)计算了数值(2)除以数值(0)的结果,也就是除数为零的运算;

第19~24行代码通过除法运算符(/)对特殊值(Infinity)进行了算术运算。其中,第19行代码计算了特殊值(Infinity)除以非零数值(2)的结果;第21行代码计算了特殊值(Infinity)除以非零数值(-2)的结果;第23行代码计算了特殊值(Infinity)除以数值(0)的结果;

第25~26行代码通过除法运算符(/)对特殊值(Infinity)和特殊值(Infinity)进行了除法运算,并将结果保存在变量(sumSum)中。

页面效果如图3.5所示。从第08行和第10行代码的输出结果来看,如果除法运算返回的结果太大或太小,那么生成的结果就是特殊值(Infinity或-Infinity)。另外,如果执行特殊值(Infinity)除以特殊值(Infinity)的算术运算,则其结果为特殊值(NaN)。

图3.5 ECMAScript除法运算符(/)

3.2.4 取模运算符及表达式

ECMAScript语法中规定取模运算符使用百分数符号“%”来表示,取模(%)运算符除了可以进行正常的数值运算外,还支持对类似“NaN”和“Infinity”特殊值的运算。

下面,来看一个应用ECMAScript取模(%)运算符的代码示例(详见源代码ch03目录中ch03-js-operator-mod.html文件)。

【代码3-6】

   01  <script type="text/javascript">
   02       var i = 5;
   03       var j = 3;
   04       var mod = i % j;
   05       console.log("5 % 3 = " + mod);
   06       var modZeroDiv = 0 % 2;
   07       console.log("0 % 2 = " + modZeroDiv);
   08       var modDivZero = 2 % 0;
   09       console.log("2 % 0 = " + modDivZero);
   10       var modInfinityDiv = Infinity % 2;
   11       console.log("Infinity % 2 = " + modInfinityDiv);
   12       var modInfinityInfinity = Infinity % Infinity;
   13       console.log("Infinity % Infinity = " + modInfinityInfinity);
   14       var modDivInfinity = 2 % Infinity;
   15       console.log("2 % Infinity = " + modDivInfinity);
   16  </script>

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

第02~05行代码定义了两个变量(i和j),并通过取模(%)运算符进行算术运算。其中,在第04行代码中通过取模(%)运算符将变量(i)和变量(j)进行了算术取模运算;

第06~07行代码通过取模(%)运算符对被除数为数值(0)、除数为非零数值进行取模运算;

类似的,第08~09行代码通过取模(%)运算符对除数为数值(0)、被除数为非零数值进行取模运算;

第10~11行代码通过取模(%)运算符对被除数为特殊值(Infinity)的情况进行了取模运算;

第12~13行代码通过取模(%)运算符对被除数和除数均为特殊值(Infinity)的情况进行了取模运算;

第14~15行代码通过取模(%)运算符对除数为特殊值(Infinity)的情况进行了取模运算。

页面效果如图3.6所示。从第09行代码的输出结果来看,表达式(2 % 0 = )的运算结果为特殊值(NaN),因为除数为零的取模运算是无意义的,所以结果为特殊值(NaN);从第11行代码的输出结果来看,表达式(Infinity % 2 = )的运算结果为特殊值(NaN),因为对特殊值(Infinity)进行取模运算也是无意义的,所以结果为特殊值(NaN);从第13行代码的输出结果来看,表达式(Infinity % Infinity = )的运算结果为特殊值(NaN),说明特殊值(Infinity)对特殊值(Infinity)取模也是没有意义的;从第15行代码的输出结果来看,表达式(2 % Infinity= )的运算结果为数值(2),这就说明对任意数值进行除数为特殊值(Infinity)的取模运算,结果均为被除数本身。

图3.6 ECMAScript取模运算符(%) 109EVVMePSk1/uKwsWUF0/H2BP1IB3Y217JOXdy4vog8stmw7uBI0LDQG5VougyS

点击中间区域
呼出菜单
上一章
目录
下一章
×