术语:“一元运算符”,“二元运算符”,“运算元”
- 运算元 —— 运算符应用的对象。比如说乘法运算
5 * 2
,有两个运算元:左运算元5
和右运算元2
。有时候人们也称其为“参数”而不是“运算元”。 - 如果一个运算符对应的只有一个运算元,那么它是 一元运算符。比如说一元负号运算符(unary negation)
-
,它的作用是对数字进行正负转换:
let x = 1;
x = -x;
alert( x ); // -1,一元负号运算符生效
如果一个运算符拥有两个运算元,那么它是 二元运算符。减号还存在二元运算符形式:
let x = 1, y = 3;
alert( y - x ); // 2,二元运算符减号做减运算
数学
- 加法
+
, - 减法
-
, - 乘法
*
, - 除法
/
, - 取余
%
, - 求幂
**
.
用二元运算符 + 连接字符串
通常,加号 +
用于求和。
但是如果加号 +
被应用于字符串,它将合并(连接)各个字符串:
let s = "my" + "string";
alert(s); // mystring
注意:只要任意一个运算元是字符串,那么另一个运算元也将被转化为字符串。
alert( '1' + 2 ); // "12"
alert( 2 + '1' ); // "21"
alert(2 + 2 + '1' ); // "41",不是 "221"
减法和除法:
alert( 6 - '2' ); // 4,将 '2' 转换为数字
alert( '6' / '2' ); // 3,将两个运算元都转换为数字
数字转化,一元运算符 +
例如:
// 对数字无效
let x = 1;
alert( +x ); // 1
let y = -2;
alert( +y ); // -2
// 转化非数字
alert( +true ); // 1
alert( +"" ); // 0
举例:
let apples = "2";
let oranges = "3";
alert( apples + oranges ); // "23",二元运算符加号合并字符串
如果要把它们当作数字对待,我们需要转化它们,再求和:
let apples = "2";
let oranges = "3";
// 在二元运算符加号起作用之前,所有的值都被转化为了数字
alert( +apples + +oranges ); // 5
// 更长的写法
// alert( Number(apples) + Number(oranges) ); // 5
运算符优先级
优先级 | 名称 | 符号 |
---|---|---|
… | … | … |
17 | 一元加号 | + |
17 | 一元负号 | - |
16 | 求幂 | ** |
15 | 乘号 | * |
15 | 除号 | / |
13 | 加号 | + |
13 | 减号 | - |
… | … | … |
3 | 赋值符 | = |
… | … | … |
赋值运算符
let x = 2 * 2 + 1;
alert( x ); // 5
赋值 = 返回一个值
let a = 1;
let b = 2;
let c = 3 - (a = b + 1);
alert( a ); // 3
alert( c ); // 0
链式赋值
let a, b, c;
a = b = c = 2 + 2;
alert( a ); // 4
alert( b ); // 4
alert( c ); // 4
//可拆分为:
c = 2 + 2;
b = c;
a = c;
原地修改
let n = 2;
n += 5; // 现在 n = 7(等同于 n = n + 5)
n *= 2; // 现在 n = 14(等同于 n = n * 2)
alert( n ); // 14
//举例:
let n = 2;
n *= 3 + 5;
alert( n ); // 16 (右边部分先被计算,等同于 n *= 8)
自增/自减
//自增
let counter = 2;
counter++; // 和 counter = counter + 1 效果一样,但是更简洁
alert( counter ); // 3
//自减
let counter = 2;
counter--; // 和 counter = counter - 1 效果一样,但是更简洁
alert( counter ); // 1
位运算符
位运算符把运算元当做 32 位整数,并在它们的二进制表现形式上操作。
- 按位与 (
&
) - 按位或 (
|
) - 按位异或 (
^
) - 按位非 (
~
) - 左移 (
<<
) - 右移 (
>>
) - 无符号右移 (
>>>
)
逗号运算符
逗号运算符能让我们处理多个语句,使用 ,
将它们分开。每个语句都运行了,但是只有最后的语句的结果会被返回。
let a = (1 + 2, 3 + 4);
alert( a ); // 7(3 + 4 的结果)
注意:
请注意逗号运算符的优先级非常低,比 =
还要低,因此上面你的例子中圆括号非常重要。
如果没有圆括号:a = 1 + 2, 3 + 4
会先执行 +
,将数值相加得到 a = 3, 7
,然后赋值运算符 =
执行, ‘a = 3’,然后逗号之后的数值 7
不会再执行,它被忽略掉了。相当于 (a = 1 + 2), 3 + 4
。