【JS红宝书¹³】乘性操作符

191 阅读3分钟

引子

本文讲述为 ECMA-262 中描述可用于操作数据值的操作符之 乘性操作符

乘性操作符

ECMAScript 定义了 3 个乘性操作符:乘法除法取模

如果乘性操作符有不是数值的操作数,则该操作数会在后台被使用 Number() 转型函数转换为数值;这意味着空字符串或 false 会被当成 0,而布尔值 true 会被当成 1。

乘法操作符

乘法操作符由一个星号(*)表示,可以用于计算 两个数值的乘积

常规写法
 let result = 35 * 66;

处理特殊值的行为

乘法操作符在处理特殊值时也有一些特殊的行为:

  • 如果操作数都是数值,则执行常规的乘法运算,即两个正值相乘是正值,两个负值相乘也是正值,正负符号不同的值相乘得到负值;
  • 如果 ECMAScript 不能表示乘积,则返回 Infinity 或-Infinity。
  • 如果有任一操作数是 NaN,则返回 NaN
  • 如果是 Infinity 乘以 0, 则返回 NaN
  • 如果是 Infinity 乘以非 0 的有限数值,则根据第二个操作数的符合返回 Infinity-Infinity
  • 如果说 Infinty 乘以 Infinity,则返回 Infinity;负负得正
  • 如果有不是数值的操作数,则先在后台用 Number() 将其转换为数值

除法操作符

除法操作符由一个斜杠(/)表示,用于计算 第一个操作数除以第二个操作数的商

常规写法
 let result = 100 / 25;

处理特殊值的行为

跟乘法操作符一样,除法操作符针对特殊值也有一些特殊的行为:

  • 如果操作数都是数值,则执行常规的除法运算,即两个正值相除是正值,两个负值相除也是正值,符号不同的值相除得到负值;如果不能表示商,则返回 Infinity-Infinity
  • 如果有任一操作数是 NaN,则返回 NaN
  • 如果 Infinity 除以 Infinity,则返回 NaN
  • 如果 0 除以 0,则返回 NaN
  • 如果是非0的有限值除以0,则根据第一个操作数的符号返回 Infinity-Infinity
  • 如果说 Infinity 除以任何数值,则根据第二个操作数的符号返回 Infinity-Infinity
  • 如果有不是数值的操作数,则先在后台用 Number() 函数将其转换为数值,然后再应用上述规则

取模操作符

取模(余数)操作数由一个百分比符号(%)表示,用于计算 第一个操作数余以第二个操作数后的最终值

常规写法
 let result = 55 % 33; // 22 

处理特殊值的行为

与其他乘性操作符一样,取模操作符对特殊值也有一些特殊的行为:

  • 如果操作数是数值,则执行常规除法运算,返回余数
  • 如果被除数是无限值,除数是有限值,则返回 NaN
  • 如果被除数是有限值,除数是 0 , 则返回 NaN
  • 如果是 Infinity 除以 Infinity,则返回 NaN
  • 如果被除数是 有限值,除数是无限值,则返回被除数
  • 如果被除数是 0,除数不是 0,则返回 0
  • 如果有不是数值的操作数,则先在后台用 Number() 函数将其转换为数值,然后再应用上述规则

总结

乘性操作符的三个操作符分别是:

  • 乘法 * 用于计算两个数的乘积。
  • 除法 / 用于计算第一个操作数除以第二个操作数的商。
  • 取模 % 用于计算第一个操作数余以第二个操作数后的余数。