贺娟 發表於 2020-1-11 20:47:00

JavaScript 算数运算符

<p><span style="font-size: 16px">算数运算符使用数值(字面量或者变量)作为操作数,并且返回一个单个数值。</span></p>
<p><span style="font-size: 16px">标准运算符是加法(+),减法(-),乘法(*),除法(/)</span></p>
<p><span style="font-size: 16px">ECMAScript操作符的与众不同之处在于,它们能够适应很多值,例如字符串、数字、布尔值,甚至是对象。</span></p>
<p><span style="font-size: 16px">但是,在应用于对象时,相应的操作符通常都会调用对象的 valueOf() 或是 toString() 方法,以便获取可以操作的值。</span></p>
<h2><span style="color: rgba(255, 255, 255, 1); background-color: rgba(0, 128, 128, 1)">&nbsp;加性操作符</span></h2>
<hr>
<h2><span style="color: rgba(0, 128, 128, 1)">&nbsp;一、加法(+)</span></h2>
<p><span style="text-decoration: underline"><span style="font-size: 16px">加法可以实现数值的加减 ,以及字符串拼接</span></span></p>
<p><span style="color: rgba(0, 51, 102, 1); font-size: 16px"><strong>语法:</strong></span></p>
<div class="cnblogs_code">
<pre>x +y</pre>
</div>
<p><span style="font-size: 16px"><strong>实例:</strong></span></p>
<p><span style="font-size: 16px">1、(Number + Number )数值类型相加</span></p>
<div class="cnblogs_code">
<pre>1+1 <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 2</span></pre>
</div>
<p><span style="font-size: 16px">2、(Boolean + Number) 布尔值与数值相加,布尔类型转换为数值</span></p>
<p><span style="font-size: 16px">  true运算时等同于 1,false 运算的时候相当于 0</span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">true</span> + 1<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 2</span></pre>
</div>
<p><span style="font-size: 16px">3、(Boolean + Boolean)布尔类型与布尔类型相加,布尔类型转换为数值</span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">false</span> + <span style="color: rgba(0, 0, 255, 1)">false</span>;   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">0</span>
<span style="color: rgba(0, 0, 255, 1)">true</span> + <span style="color: rgba(0, 0, 255, 1)">true</span>;   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 2</span>
<span style="color: rgba(0, 0, 255, 1)">false</span> + <span style="color: rgba(0, 0, 255, 1)">true</span>;   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 1</span></pre>
</div>
<p><span style="font-size: 16px">&nbsp;4、(Number + String)数值与字符串类型的相加,字符串拼串</span></p>
<div class="cnblogs_code">
<pre>'No' + 1   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 'No1'</span></pre>
</div>
<p><span style="font-size: 16px">&nbsp;5、(String + String)字符串类型与字符串类型相加 ,字符串拼串</span></p>
<div class="cnblogs_code">
<pre>'say' + 'hallo'      <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> "sayhallo"</span></pre>
</div>
<p><span style="font-size: 16px">6、(String + Boolean) 字符串类型与布尔类型相加,字符串拼串</span></p>
<div class="cnblogs_code">
<pre>'result = '+<span style="color: rgba(0, 0, 255, 1)">true</span>    <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">"result = true"</span></pre>
</div>
<p><strong><span style="font-size: 16px; color: rgba(0, 51, 102, 1)">两个操作符都是数值,执行常规加法计算,然后根据下列规则返回结果:</span></strong></p>
<p style="margin-left: 30px"><span style="font-size: 16px">1、如果有一个操作数是 NaN,则结果是 NaN;</span></p>
<p style="margin-left: 30px"><span style="font-size: 16px">2、如果是 Infinity 加 Infinity ,则结果是 Infinity;</span></p>
<p style="margin-left: 30px"><span style="font-size: 16px">3、如果是 -Infinity 加&nbsp; -Infinity,则结果是 -Infinity;</span></p>
<p style="margin-left: 30px"><span style="font-size: 16px">4、如果是 Infinity 加 -Infinity,则结果是 NaN;</span></p>
<p style="margin-left: 30px"><span style="font-size: 16px">5、如果是 +0 加 -0,则结果是 +0;</span></p>
<p style="margin-left: 30px"><span style="font-size: 16px">6、如果是 -0 加 -0,则结果是 -0;</span></p>
<p style="margin-left: 30px"><span style="font-size: 16px">7、如果是 +0 加 +0,则结果是 +0;</span></p>
<p><strong><span style="font-size: 16px; color: rgba(0, 51, 102, 1)">但是当有一个操作符号是字符串的时候,就要应用如下规则:</span></strong></p>
<p><span style="font-size: 16px">  1、如果两个操作符都是字符串,则将第一个操作符与第二个操作符拼接起来;</span></p>
<p><span style="font-size: 16px">  2、如果只有一个操作符是字符串,则将另一个操作符转换为字符串;</span></p>
<p><span style="color: rgba(0, 51, 102, 1)"><strong><span style="font-size: 16px">如果有一个操作数是对象、数值、或是布尔值,则调用它们的 toString() 方法取得相应的字符串值,然后再应用前面的关于字符串的规则。</span></strong></span></p>
<p><span style="font-size: 16px">对于 undefined 和 null,分别调用 String() 函数取得字符串 'undefined' 和 'null' 。</span></p>
<p>&nbsp;</p>
<h2><span style="color: rgba(0, 128, 128, 1)">二、减法(-)</span></h2>
<p><span style="font-size: 16px">使两个操作符号相减,求其差值。</span></p>
<p><span style="font-size: 16px; color: rgba(0, 51, 102, 1)"><strong>语法:</strong></span></p>
<div class="cnblogs_code">
<pre>x - y</pre>
</div>
<p><span style="font-size: 16px; color: rgba(0, 51, 102, 1)"><strong>实例:</strong></span></p>
<p><span style="font-size: 16px">按照普通减法运算的规则计算。</span></p>
<p><span style="font-size: 16px">数值类型的值减去字符串类型的数字,得到的结果是数值类型的值。</span></p>
<p><span style="font-size: 16px">true 转换为 1,false 转换为 0;</span></p>
<p><span style="font-size: 16px">''转换为 0,‘2’ 转换为 2,null 转换为 0;</span></p>
<div class="cnblogs_code">
<pre>9 - 2    <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 7</span>
2 - 9    <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> -7</span>
9 - '2'    <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 7</span>
'ww'-7   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">NaN</span></pre>
</div>
<p><span style="color: rgba(0, 51, 102, 1)"><strong><span style="font-size: 16px">&nbsp;减法操作符在处理各种数据类型转换的时候,也需要遵循一些特殊规则:</span></strong></span></p>
<p><span style="font-size: 16px">  1、如果有一个操作数是 NaN,则结果是 NaN;</span></p>
<p><span style="font-size: 16px">  2、如果是 Infinity 减 Infinity ,则结果是 NaN;</span></p>
<p><span style="font-size: 16px">  3、如果是 -Infinity 减&nbsp; -Infinity,则结果是 NaN;</span></p>
<p><span style="font-size: 16px">  4、如果是 Infinity 减 -Infinity,则结果是 Infinity;</span></p>
<p><span style="font-size: 16px">  5、如果是 -Infinity 减 Infinity,则结果是 -Infinity;</span></p>
<p><span style="font-size: 16px">  6、如果是 -0 减去 -0,则结果是 +0;</span></p>
<p><span style="font-size: 16px">  7、如果是 +0 减 +0,则结果是 +0;</span></p>
<p><span style="font-size: 16px">  8、如果是 -0 减 +0,则结果是 -0;</span></p>
<p><span style="font-size: 16px">  9、如果有一个操作数是字符串、布尔值、null值或是 undefined,则先在后台调用 Number() 函数将其转换为数值,然后在根据前面的规则进行计算。如果转换结果是 NaN,则减法的结果是 NaN;</span></p>
<p><span style="font-size: 16px">  10、如果有一个操作数是对象,则调用对象的 valueOf() 方法以获取表示该对象的数值。如果得到的结果是 NaN,则减法的结果是 NaN,如果对象没有 valueOf() 方法,就调用 toString() 方法并且将得到的字符串转换为数值。</span></p>
<p>&nbsp;</p>
<h2><span style="background-color: rgba(0, 128, 128, 1); color: rgba(255, 255, 255, 1)">乘性操作符</span></h2>
<hr>
<h2>&nbsp;<span style="color: rgba(0, 128, 128, 1)">一、除法(/)</span></h2>
<p><span style="font-size: 16px">除法运算的结果是两个操作数的商,左面的操作数是被除数,右面的操作数是除数。</span></p>
<p><span style="font-size: 16px"><strong>语法:</strong></span></p>
<div class="cnblogs_code">
<pre>x / y</pre>
</div>
<p><span style="font-size: 16px"><strong>实例:</strong></span></p>
<p><span style="font-size: 16px">1、JS 中 1除以2 得到的是 0.5</span></p>
<div class="cnblogs_code">
<pre>1 / 2         <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">在Javscript 中返回的是 0.5</span>
1 / 2         <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">在 Java中返回的是 0</span><span style="color: rgba(0, 128, 0, 1)">
//</span><span style="color: rgba(0, 128, 0, 1)">不需要数字是明确的浮点数</span></pre>
</div>
<p><span style="font-size: 16px">&nbsp;2、数字是浮点数</span></p>
<p><span style="font-size: 16px">0作为除数的时候,所得结果为 <span style="color: rgba(0, 51, 102, 1)"><strong>infinity(无穷的)</strong></span></span></p>
<div class="cnblogs_code">
<pre>1.0 / 2.0    <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">在 JS 和 Java 中都返回 0.5</span>

2 / 0      <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 在 JS 中返回 Infinity</span>
2.0 / 0.0    <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">返回 Infinity</span>
2.0 / 0.0    <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 在JS中返回 - infinity</span>
0 / 0   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">NaN</span></pre>
</div>
<p><strong><span style="font-size: 16px; color: rgba(0, 51, 102, 1)">除法操作符对特殊值也有特殊的处理规则,规则如下:</span></strong></p>
<p><span style="font-size: 16px">  1、如果操作数都是数值,执行常规的除法计算,即同号得正,异号得负。如果商超过了 ECMAScript 数值的表示范围,则返回 Infinity 或是 -Infinity</span></p>
<p><span style="font-size: 16px">  2、如果有一个操作数是 NaN,则结果是 NaN;</span></p>
<p><span style="font-size: 16px">  3、如果是 Infinity 被 Infinity除,则结果是 NaN;</span></p>
<p><span style="font-size: 16px">  4、如果是 0 被 0 除,则结果是 NaN;</span></p>
<p><span style="font-size: 16px">  5、如果是非0的有限数被 0 除,则结果是 Infinity 或 -infinity,取决于有符号操作数的符号;</span></p>
<p><span style="font-size: 16px">  6、如果是 Infinity 被任何非 0数值除,则结果是 Infinity 或 - Infinity,取决于有符号操作数的符号;</span></p>
<p><span style="font-size: 16px">  7、如果有一个操作数不是数值,则在后台调用 Number() 将其转换为 数值,然后在应用上面的规则;</span></p>
<p>&nbsp;</p>
<h2><span style="color: rgba(0, 128, 128, 1)">二、乘法(*)</span></h2>
<p><span style="font-size: 16px">乘法运算符用于计算两个数值的乘积。</span></p>
<p><span style="font-size: 16px"><strong>语法:</strong></span></p>
<div class="cnblogs_code">
<pre>x * y</pre>
</div>
<p><span style="font-size: 16px"><strong>实例:</strong></span></p>
<p><span style="font-size: 16px">1、按照普通乘法运算规则,同号得正。</span></p>
<div class="cnblogs_code">
<pre>3 * 3<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 9</span>
3 * -3<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> -9</span>
-3 * -3<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 9</span><span style="color: rgba(0, 128, 0, 1)">
//</span><span style="color: rgba(0, 128, 0, 1)">同号得正,异号得负一元操作符</span></pre>
</div>
<p><span style="font-size: 16px">2、&nbsp; infinity (无穷) 乘以 0 得 NaN;infinity 乘以 infinity 得 infinity</span></p>
<div class="cnblogs_code">
<pre>Infinity * 3    <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Infinity</span>
Infinity * Infinity   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">Infinity</span>
Infinity * -Infinity    <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">-Infinity</span></pre>
</div>
<p><span style="font-size: 16px">3、字符串类型与数字类型相乘 得 NaN</span></p>
<div class="cnblogs_code">
<pre>"ss" * 3   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> NaN</span>
'11' * 3    <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 33</span></pre>
</div>
<p><span style="font-size: 16px">4、布尔值会转换成数值再进行运算</span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">true</span> * 3<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 3</span>
<span style="color: rgba(0, 0, 255, 1)">false</span> * 3   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 0</span>
<span style="color: rgba(0, 0, 255, 1)">false</span> * <span style="color: rgba(0, 0, 255, 1)">true</span>   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 0</span></pre>
</div>
<p><strong><span style="font-size: 16px; color: rgba(0, 51, 102, 1)">&nbsp;在处理特殊值的时候,乘法操作符遵行以下特殊规则:</span></strong></p>
<p><span style="font-size: 16px">  1、如果操作数都数值,执行常规的乘法计算,即同号得正,异号得负。如果乘积超过了ECMAScript&nbsp; 数值的表示范围,则返回 Infinity 或是 -Infinity;</span></p>
<p><span style="font-size: 16px">  2、如果有一个操作符是 NaN,则结果是 NaN;</span></p>
<p><span style="font-size: 16px">  3、如果是 Infinity 与 0 相乘,则结果是 NaN;</span></p>
<p><span style="font-size: 16px">  4、如果是 Infinity 与 非0数值相乘,则结果是 Infinity 或是 -Infinity,取决于有符号操作的符号;</span></p>
<p><span style="font-size: 16px">  5、如果是 Infinity 与 Infinity 相乘 ,则结果是 Infinity;</span></p>
<p><span style="font-size: 16px">  6、如果有一个操作数不是数值,则在后台调用 Number() 将其转换为数值,然后再应用上面的规则。</span></p>
<p>&nbsp;</p>
<h2><span style="color: rgba(0, 128, 128, 1)">三、求余(%)</span></h2>
<p><span style="font-size: 16px">求余运算符返回第一个操作数对第二个操作数的模,即 var1 对 var2 取模,其中 var1 和 var2 是变量。取模功能就是 var1 除以 var 2 的整型余数。</span></p>
<p><span style="font-size: 16px; color: rgba(0, 51, 102, 1)"><strong>语法:</strong></span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">var</span> 1 % <span style="color: rgba(0, 0, 255, 1)">var</span> 2</pre>
</div>
<p><span style="font-size: 16px; color: rgba(0, 51, 102, 1)"><strong>实例:</strong></span></p>
<p><span style="font-size: 16px">1、负数模以正数得 0</span></p>
<div class="cnblogs_code">
<pre>1 % 4       <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 1</span>
1 % 0       <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> NaN</span>
1 % 0.5   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 0</span></pre>
</div>
<p><span style="font-size: 16px">2、非数字(NaN)模以 数字得 NaN</span></p>
<div class="cnblogs_code">
<pre>NaN % 3    <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> NaN</span>
6%3   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 2</span>
2 % <span style="color: rgba(0, 0, 255, 1)">null</span>   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> NaN</span>
-2 % 3   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> -2</span>
4.4 % 2    <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 0.2</span></pre>
</div>
<p><strong><span style="font-size: 16px; color: rgba(0, 51, 102, 1)">求模(求余)操作符由一个百分号(%)表示,遵循以下的规则来处理特殊的值:</span></strong></p>
<p><span style="font-size: 16px">  1、如果两个操作符都是数值,执行常规的除法计算,返回除得的余数</span></p>
<p><span style="font-size: 16px">  2、如果被除数是无穷大值而除数是有限大的数值,则结果是 NaN</span></p>
<p><span style="font-size: 16px">  3、如果被除数是有限大的数值,而除数是 0 ,则结果是 NaN</span></p>
<p><span style="font-size: 16px">  4、如果是 Infinity 被 Infinity 除,则结果是 NaN</span></p>
<p><span style="font-size: 16px">  5、如果被除数是有限大的数值,而除数是无穷大的数值,则结果是被除数</span></p>
<p><span style="font-size: 16px">  6、如果被除数是 0 ,则结果是 0</span></p>
<p><span style="font-size: 16px">  7、如果有一个操作数不是数值,则在后台调用 Number() 将其转换为数值,然后再应用上面的规则。</span></p>
<p>&nbsp;</p>
<h2><span style="color: rgba(0, 128, 128, 1)">四、幂( ** )</span></h2>
<p><span style="font-size: 16px">幂运算符返回第一个操作符作底数,第二个操作数作为指数的乘方。</span></p>
<p><span style="font-size: 16px">即 var1<sup>var2 </sup>,其中 var1 和 var2 是其两个`操作符。</span></p>
<p><span style="font-size: 16px">幂运算是右结合的。a ** b ** c 等同于 a ** (b ** c)。</span></p>
<p><span style="font-size: 16px; color: rgba(0, 51, 102, 1)"><strong>语法:</strong></span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">var</span> 1 ** var2</pre>
</div>
<p><span style="font-size: 16px; color: rgba(0, 51, 102, 1)"><strong>&nbsp;注释:</strong></span></p>
<p><span style="font-size: 16px">包括 PHP 或是 Python 等大多数语言中,都包含幂运算符 (一般来说符号是 ^ 或是 ** )。</span></p>
<p><span style="font-size: 16px">这些语言中的幂运算符有着比其他单目元算符(一元运算符 + / -)更高的优先级。</span></p>
<p><span style="font-size: 16px">但是,在 Bash 中, ** 运算符被设计为比单目运算符的运算符运算符的优先级更低。</span></p>
<p><span style="font-size: 16px">在最新的 JavaScript 中,禁止使用带有歧义的幂运算表达式,例如,底数前面可不可以紧跟一元运算符(<code>+/-/~/!/delete/void/typeof</code>)</span></p>
<p><strong><span style="font-size: 16px">实例:</span></strong></p>
<p>&nbsp;</p>
<div class="cnblogs_code">
<pre>-<span style="color: rgba(128, 0, 128, 1)">2</span> ** <span style="color: rgba(128, 0, 128, 1)">2</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">在Bash 中等于 4,在其他的语言中一般等于 -4
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">在 JavaScript 中报错,因为会产生歧义<br>//不带括号的一元表达式不能出现在'**'的左侧 <br>//<span class="icon" title="错误"><span class="message-body-wrapper"><span class="message-flex-body"><span class="message-body devtools-monospace">SyntaxError: unparenthesized unary expression can't appear on the left-hand side of '**'</span></span></span></span><br></span>
-(<span style="color: rgba(128, 0, 128, 1)">2</span> ** <span style="color: rgba(128, 0, 128, 1)">2</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 使用圆括号就能够很清晰地表现出作者的意图,不会产生歧义,报错</span> </pre>
</div>
<p>&nbsp;<img src="https://img2018.cnblogs.com/i-beta/1748092/202001/1748092-20200112151141172-2077824701.png" alt=""></p>
<p><span style="font-size: 16px"><strong>2 ** 3</strong>&nbsp; </span></p>
<p><span style="font-size: 16px"><span style="color: rgba(136, 136, 136, 1)">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</span>即 <strong>2 的 3 次方</strong></span></p>
<p><span style="font-size: 16px"><strong>3 ** 2</strong>&nbsp; </span></p>
<p><span style="font-size: 16px">&nbsp; &nbsp; &nbsp; &nbsp; 即&nbsp;</span><span style="font-size: 16px"><strong>3 的 2 次方</strong></span></p>
<p><span style="font-size: 16px"><strong>10 ** -1</strong> </span></p>
<p><span style="font-size: 16px">&nbsp; &nbsp; &nbsp; &nbsp; 即 <strong>10 的 -1 次方</strong></span></p>
<p><span style="font-size: 16px"><strong>2&nbsp; ** 3 ** 2</strong> </span></p>
<p><span style="font-size: 16px">&nbsp; &nbsp; &nbsp; &nbsp; 即为 <strong>2 的 3^2次方 的次方(2^9 = 512)</strong>,<span style="text-decoration: underline">因为幂运算符遵循右结合规则</span></span></p>
<p><span style="font-size: 16px"><strong><code class="language-js"><span class="token number">2 <span class="token operator">** <span class="token punctuation">(<span class="token number">3 <span class="token operator">** <span class="token number">2<span class="token punctuation">)</span></span></span></span></span></span></span></code> </strong></span></p>
<p><span style="font-size: 16px">&nbsp; &nbsp; &nbsp; &nbsp; 等价于<strong> 2 ^ 9 = 512</strong></span></p>
<p><span style="font-size: 16px"><strong>(2 ** 3) ** 2&nbsp;</strong>&nbsp; </span></p>
<p><span style="font-size: 16px">&nbsp; &nbsp; &nbsp; &nbsp; 等价于 (<strong>2^3)^ 2 = 8^2 = 64</strong></span></p>
<div class="cnblogs_code">
<pre>2 ** 3 <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 8</span>
3 ** 2 <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 9</span>
3 ** 2.5 <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 15.588457268119896</span>
10 ** -1 <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 0.1</span>
NaN ** 2 <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> NaN</span>

2 ** 3 ** 2 <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 512</span>
2 ** (3 ** 2) <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 512</span>
(2 ** 3) ** 2 <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 64</span></pre>
</div>
<p>&nbsp;</p>
<h2><span style="color: rgba(255, 255, 255, 1); background-color: rgba(0, 128, 128, 1)">一元操作符</span></h2>
<hr>
<p><span style="font-size: 16px">&nbsp;递增和递减操作符直接借鉴自 C,而且各有两个版本:前置型 和 后置型。</span></p>
<p><span style="font-size: 16px">前置型应该位于要进行操作的变量之前;</span></p>
<p><span style="font-size: 16px">后置型应该位于要进行操作的变量之后;</span></p>
<h2><span style="color: rgba(0, 128, 128, 1)">一、递增(++)和递减( -- )</span></h2>
<p><span style="font-size: 16px">递增操作符实现的效果是为其操作数增加 1,并且返回一个数值。</span></p>
<p><span style="font-size: 16px">递减操作符号将其操作数减去 1 ,并且返回一个数值。</span></p>
<p><span style="font-size: 16px">如果后置(postfix)使用,就会在递增(减)之前返回数值(a++ / a--)</span></p>
<p><span style="font-size: 16px">如果前置(prefix)使用,将会在递增(减)后返回数值(++a / --a)</span></p>
<p><span style="font-size: 16px; color: rgba(0, 51, 102, 1)"><strong>语法:</strong></span></p>
<div class="cnblogs_code">
<pre>a++ 或者 ++<span style="color: rgba(0, 0, 0, 1)">a
a</span>--或者 --a</pre>
</div>
<p><strong><span style="font-size: 16px"><span style="color: rgba(0, 51, 102, 1)">&nbsp;这是个操作符对任何值都适用,也就是它们不仅仅适用于整数,还可以用于字符串、布尔值、浮点数值和对象。在应用于不同的值时,递增和递减操作符遵行以下规则。</span> </span></strong></p>
<p><span style="font-size: 16px">  1、在应用于一个包含有效数字字符的字符串时,先将其转换成字符值,再执行加减 1 的操作。字符串变量变成数值变量。</span></p>
<p><span style="font-size: 16px">  2、在应用于一个不包含有效数字字符的字符串时,将变量的值转换成 NaN,字符串变量变成数值变量。</span></p>
<p><span style="font-size: 16px">  3、在应用于布尔值 false 时,先将其转换为 0再执行加减 1 的操作。布尔值变量变成数值变量。</span></p>
<p><span style="font-size: 16px">  4、在应用于布尔值 true 时,先将其转换为 1 再执行加减 1 的操作。布尔值变量变成数值变量。</span></p>
<p><span style="font-size: 16px">  5、在应用于浮点数值时,执行加减 1 的操作。</span></p>
<p><span style="font-size: 16px">  6、在应用于对象时,先调用对象的 valueOf() 方法以获得一个可供操作的值。然后对该值应对前述规则。如果结果是 NaN,则在调用 toString() 方法后在应用前述规则。对象变量变数值变量。</span></p>
<p><span style="text-decoration: underline"><span style="font-size: 16px">后置型递增和递减操作符的语法不变,只不过需要放在变量之后而不是前面。后置与前置之间有一个重要的区别:递增和递减操作是在包含他们的语句中被裘值之后才执行的。</span></span></p>
<ul>
<li><span style="font-size: 16px">num++&nbsp; 等价于&nbsp; num + 1</span></li>
<li><span style="font-size: 16px">++num&nbsp; 等价于&nbsp; num = mun + 1</span></li>
</ul>
<p><span style="text-decoration: underline"><span style="font-size: 16px; color: rgba(0, 51, 102, 1); text-decoration: underline">执行前置递增 和 递减操作的时候,变量的值都是在语句被求值之前被改变的(在计算机科学领域,这种情况通常被称之为<strong>副效应</strong>)</span></span></p>
<p><span style="font-size: 16px; color: rgba(0, 51, 102, 1)"><strong>实例:</strong></span></p>
<p><span style="font-size: 16px; color: rgba(0, 128, 128, 1)"><strong>前置递减:</strong></span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">var</span> num1 = 2<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">var</span> num2 = 30<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">var</span> num3 = --num1 + num2;   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">等于 31</span>
<span style="color: rgba(0, 0, 255, 1)">var</span> num4 = num1 = num2;   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">等于 31</span></pre>
</div>
<p><span style="font-size: 16px">在这里 num3 之所以等于 31,是因为 num1 先减去了 1 才与 num2 相加。</span></p>
<p><span style="font-size: 16px">而变量 num4 也等于 21 是因为相应的加法操作使用了 num1 减去 1之后的值。</span></p>
<p><span style="color: rgba(0, 128, 128, 1); font-size: 16px"><strong>后置递减:</strong></span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">var</span> num1 = 2<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">var</span> num2 = 30<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">var</span> num3 = num1-- + num2;   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">等于 32</span>
<span style="color: rgba(0, 0, 255, 1)">var</span> num4 = num1 = num2;   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">等于 31</span></pre>
</div>
<p><span style="font-size: 16px">在计算的时候 num3 使用了 num1 的原始值 2完成了加法计算,</span></p>
<p><span style="font-size: 16px">而 num4 则使用了递减后的值 1;</span></p>
<p>&nbsp;</p>
<h2><span style="color: rgba(0, 128, 128, 1)">二、一元加号(+)</span></h2>
<p><span style="font-size: 16px">一元加操作符使用一个加号(+)表示,在数值前面不会对数值产生任何影响。</span></p>
<p><span style="font-size: 16px; color: rgba(0, 51, 102, 1)"><strong>语法:</strong></span></p>
<div class="cnblogs_code">
<pre> +x</pre>
</div>
<p><strong><span style="font-size: 16px; color: rgba(0, 51, 102, 1)">实例:</span></strong></p>
<p><span style="font-size: 16px; color: rgba(0, 51, 102, 1)">但是在对非数值应用一元加操作符号&nbsp; ,该运算符会像 Number() 转型函数一样对这个值进行转换。</span></p>
<p><span style="font-size: 16px; color: rgba(0, 51, 102, 1)">布尔值 true 和 false 会转换为 1和 0;字符串值会被按照一组特殊的规则解析,而对象是先调用它们的 valueOf()&nbsp; 或是 toString()方法,在转换它们的到的值。</span></p>
<p><span style="font-size: 16px">  尽管一元负号也能转换非数值类型,<span style="text-decoration: underline">但是一元正号是转换其他对象到数值的最快方法</span>,也是最推荐的做法,因为它不会对数值执行多余的操作。</span></p>
<p><span style="font-size: 16px">  可以将字符串转换为整数个浮点数形式,也可以转换为非字符串值 true、false、null。小数和十六进制格式字符串也可以转换为数值。负数形式字符串也可以转换为数值(对十六进制不适用)。如果它不能解析一个值,则计算结果为 NaN。</span></p>
<div class="cnblogs_code">
<pre>+ '02';   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 值变成数值 2</span>
+ '2.1'   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">值变成数值 2.1</span>
+ 'z'      <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">值变成NaN</span>
+ <span style="color: rgba(0, 0, 255, 1)">true</span>   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">值变成数值1</span>
+ 2.1       <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">值变成数值2.1</span>

<span style="color: rgba(0, 0, 255, 1)">var</span> a = {valueOf:<span style="color: rgba(0, 0, 255, 1)">function</span>() {<span style="color: rgba(0, 0, 255, 1)">return</span> -1<span style="color: rgba(0, 0, 0, 1)">;}}
a </span>= +<span style="color: rgba(0, 0, 0, 1)">a;
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 值变成数值-1</span></pre>
</div>
<p>&nbsp;</p>
<h2><span style="color: rgba(0, 128, 128, 1)">三、一元减号(-)</span></h2>
<p><span style="font-size: 16px">一元符号运算符位于操作数前面,并转换操作数的符号。</span></p>
<p><span style="font-size: 16px">一元减操作符主要用于表示负数,例如将 1转换为 -1。</span></p>
<p><strong><span style="font-size: 16px; color: rgba(0, 51, 102, 1)">语法:</span></strong></p>
<div class="cnblogs_code">
<pre>-a</pre>
</div>
<p><span style="font-size: 16px; color: rgba(0, 51, 102, 1)"><strong>实例</strong>:</span></p>
<p><span style="font-size: 16px">在将一元减操作符应用于数值的时候,该值会转换为负数。但是当应用于非数值的时候,一元减操作符遵循一元加操作符相同的规则,最后再将得到的数值转换为负值。</span></p>
<div class="cnblogs_code">
<pre>- '02';   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 值变成数值 -2</span>
- '2.1'   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">值变成数值 -2.1</span>
- 'z'      <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">值变成NaN</span>
- <span style="color: rgba(0, 0, 255, 1)">true</span>   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">值变成数值-1</span>
- 2.1       <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">值变成数值-2.1</span>

<span style="color: rgba(0, 0, 255, 1)">var</span> a = {valueOf:<span style="color: rgba(0, 0, 255, 1)">function</span>() {<span style="color: rgba(0, 0, 255, 1)">return</span> -1<span style="color: rgba(0, 0, 0, 1)">;}}
a </span>= -<span style="color: rgba(0, 0, 0, 1)"> a;
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 值变成数值1</span></pre>
</div>
<p>&nbsp;</p>
<hr>
<p>&nbsp;</p>
<p><span style="font-size: 16px; color: rgba(0, 128, 128, 1)">参考资料:</span></p>
<p><span style="font-size: 16px">《JavaScript 高级程序设计》</span></p>
<p><span style="font-size: 16px">https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators</span></p><br><br>
来源:https://www.cnblogs.com/nyw1983/p/12178784.html
頁: [1]
查看完整版本: JavaScript 算数运算符