算术运算符
加减乘除
- 加法运算符:
x + y - 减法运算符:
x - y - 乘法运算符:
x * y -
指数
-
余数
余数运算符(
%)返回前一个运算子被后一个运算子除,所得的余数。12 % 5 // 28 % 3 // 2//运算结果的正负号由第一个运算子的正负号决定。-1 % 2 // -1
自增自减
自增和自减运算符,是一元运算符,只需要一个运算。它们的作用是将运算子首先转为数值,然后加上1或者减去1。它们会修改原始变量。 ```javascript var x = 1; ++x // 2 x // 2
—x // 1 x // 1
var x = 1; var y = 1;
x++ // 1 x // 2 ++y // 2
<a name="VSbQQ"></a>### 求值数值运算符(`+`)作用在于可以将任何值转为数值(与`Number`函数的作用相同)```javascript+true // 1+[] // 0+{} // NaN
负数
负数值运算符(-),也同样具有将一个值转为数值的功能,只不过得到的值正负相反。连用两个负数值运算符,等同于数值运算符。
var x = 1;-x // -1-(-x) // 1
赋值
用于给变量赋值。最常见的赋值运算符,当然就是等号(=)。
// 将 1 赋值给变量 xvar x = 1;// 将变量 y 的值赋值给变量 xvar x = y;变形x += y // 等同于 x = x + yx -= y // 等同于 x = x - yx *= y // 等同于 x = x * yx /= y // 等同于 x = x / yx %= y // 等同于 x = x % yx **= y // 等同于 x = x ** y
且&&
运算规则是:
如果第一个运算子的布尔值为true,则返回第二个运算子的值(注意是值,不是布尔值);
如果第一个运算子的布尔值为false,则直接返回第一个运算子的值,且不再对第二个运算子求值。
可以判断多个&&运算,如果都是 ture 返回最后一个运算的值。如果其中一个是 false 直接返回当前值
't' && '' // ""'t' && 'f' // "f"'t' && (1 + 2) // 3'' && 'f' // ""'' && '' // ""var x = 1;(1 - 1) && ( x += 1) // 0x // 1//因为第一个表达式的布尔值是 false,所以返回第一个表达式的值此时后面的表达式不会执行,即 x 的值不会被改变 即短路逻辑
或||
运算规则是:
如果第一个运算子的布尔值为true,则返回第一个运算子的值,且不再对第二个运算子求值;
如果第一个运算子的布尔值为false,则返回第二个运算子的值。
可以判断多个 || 运算,如果都是 fasle 返回最后一个运算的值。如果其中一个是 ture 直接返回当前值
't' || '' // "t"'t' || 'f' // "t"'' || 'f' // "f"'' || '' // ""var x = 1;(1 - 1) || ( x += 1)x // 2//上面代码中,前面的运算值为 0 是 fasle,所以会输出后面的运算结果
非!
null undefined “” 0 NaN false 这六个值取反是 ture,其他都是 false
三元条件运算符(?:)
三元条件运算符由问号(?)和冒号(:)组成,分隔三个表达式。
它是 JavaScript 语言唯一一个需要三个运算子的运算符。
如果第一个表达式的布尔值为true,则返回第二个表达式的值,否则返回第三个表达式的值。
't' ? 'hello' : 'world' // "hello"0 ? 'hello' : 'world' // "world"
比较运算符
>大于运算符<小于运算符<=小于或等于运算符>=大于或等于运算符==相等运算符===严格相等运算符!=不相等运算符!==严格不相等运算符
运算符隐藏的类型转换,会带来一些违反直觉的结果。最好只使用严格相等运算符(===)。
二进制运算符
或与否
二进制位运算符用于直接对二进制位进行计算,一共有7个。
- 二进制或运算符(or):符号为
|,表示若两个二进制位都为0,则结果为0,否则为1。 - 二进制与运算符(and):符号为
&,表示若两个二进制位都为1,则结果为1,否则为0。 - 二进制否运算符(not):符号为
~,表示对一个二进制位取反。 - 异或运算符(xor):符号为
^,表示若两个二进制位不相同,则结果为1,否则为0。 - 左移运算符(left shift):符号为
<<,详见下文解释。 - 右移运算符(right shift):符号为
>>,详见下文解释。 - 头部补零的右移运算符(zero filled right shift):符号为
>>>,详见下文解释。
这些位运算符直接处理每一个比特位(bit),所以是非常底层的运算,好处是速度极快,缺点是很不直观,许多场合不能使用它们,否则会使代码难以理解和查错。
运算顺序
运算符的优先级决定了表达式中运算执行的先后顺序,优先级高的运算符最先被执行。
运算符优先级 | MDN里面的运算顺序多达 20 种。
()里面的优先级最高,考虑到以后协同工作和代码的可读性只记这一种。
