注:本文为 《 JavaScript 完全手册(2018版) 》第32节,你可以查看该手册的完整目录。
对任何编程语言执行数学运算和微积分都是很常见的事情。 JavaScript 提供了几个运算符来帮助我们处理数字。
算术运算符
相加 (+)
const three = 1 + 2 const four = three + 1
如果你使用字符串,+
运算符也可以作为字符串连接,所以要注意:
const three = 1 + 2 three + 1 // 4 'three' + 1 // three1
相减(-)
const two = 4 - 2
除法(/)
返回第一个数字和第二个数字之间商:
const result = 20 / 5 //result === 4 const result = 20 / 7 //result === 2.857142857142857
如果除以 0,JavaScript 不会抛出任何错误,而是返回 Infinity
(如果是负值返回 -Infinity
)。
1 / 0 //Infinity -1 / 0 //-Infinity
取余(%)
取余在很多情况下都很有用:
const result = 20 % 5 //result === 0 const result = 20 % 7 //result === 6
对 0 取余始终是 NaN
,一个特殊值,意思是“不是一个数字”:
1 % 0 //NaN -1 % 0 //NaN
乘法 (*)
1 * 2 //2 -1 * 2 //-2
求幂(**)
将第一个操作数乘第二个操作数次数:
1 ** 2 //1 2 ** 1 //2 2 ** 2 //4 2 ** 8 //256 8 ** 2 //64
一元运算符
递增 (++)
递增数字。这是一个一元运算符,如果放在数字之前,则返回递增后的值。
如果放在数字后面,它将返回原始值,然后递增。
let x = 0 x++ //0 x //1 ++x //2
递减(–)
和递增运算符相似,不过它递减值。
let x = 0 x-- //0 x //-1 --x //-2
一元负号(-)
返回操作数的负值
let x = 2 -x //-2 x //2
一元正号(+)
如果操作数不是数字,它会尝试将操作数转换数字。否则,如果操作数已经是一个数字,它什么都不做。
let x = 2 +x //2 x = '2' +x //2 x = '2a' +x //NaN
赋值快捷方式
常规赋值运算符 =
,对所有算术运算符的都有一个快捷方式,它们允许您组合赋值,将第一个操作数和第二个操作数的结果赋值给第一个操作数。
它们是:
+=
:加法赋值
-=
:除法赋值
*=
:乘法赋值
/=
:除法赋值
%=
:取余赋值
**=
:求幂赋值
例子:
const a = 0 a += 5 //a === 5 a -= 2 //a === 3 a *= 2 //a === 6 a /= 2 //a === 3 a %= 2 //a === 1
优先级
每个复杂的表达式都会引入优先问题。
看这个:
const a = 1 * 2 + 5 / 2 % 2
结果等于 2.5。但是为什么呢?哪个运算先执行,哪个后执行?
有些运算符的优先级比其它的高。优先级规则如下:
-
+
++
--
一元运算符,递增,递减*
/
%
乘法/除法+
-
加法/减法=
+=
-=
*=
/=
%=
**=
赋值运算
同一级别的运算符(如 +
和 -
)按找到的顺序执行
按照上面的顺序,我们可以解决这个计算:
const a = 1 * 2 + 5 / 2 % 2 const a = 1 * 2 + 5 / 2 % 2 const a = 2 + 2.5 % 2 const a = 2 + 0.5 const a = 2.5
最新评论
写的挺好的
有没有兴趣翻译 impatient js? https://exploringjs.com/impatient-js/index.html
Flexbox playground is so great!
感谢总结。
awesome!
这个好像很早就看到类似的文章了
比其他的教程好太多了
柯理化讲的好模糊…没懂