JavaScript表达式与运算符篇
本文记录的是JavaScript官网学习中的表达式与运算符篇
运算符
JavaScript 拥有如下类型的运算符。本节描述了运算符和运算符的优先级。
- 赋值运算符(Assignment operators)
- 比较运算符(Comparison operators)
- 算数运算符(Arithmetic operators)
- 位运算符(Bitwise operators)
- 逻辑运算符(Logical operators)
- 字符串运算符(String operators)
- 条件(三元)运算符(Conditional operator)
- 逗号运算符(Comma operator)
- 一元运算符(Unary operators)
- 关系运算符(Relational operator)
JavaScript 拥有二元和一元运算符和一个特殊的三元运算符(条件运算符)。
赋值运算符
赋值运算符将它右边操作数的值赋给它左边的操作数。最简单的赋值运算符是等于(=),它将右边的操作数值赋给左边的操作数。
还有一些复合赋值操作符,它们是下表列出的这些操作的简写:
| 名字 | 简写的运算符 | 含义 |
|---|---|---|
| 赋值 | x = y | x = y |
| 加法赋值 | x += y | x = x + y |
| 减法赋值 | x -= y | x = x - y |
| 乘法赋值 | x *= y | x = x * y |
| 除法赋值 | x /= y | x = x / y |
| 求余赋值 | x %= y | x = x % y |
| 求幂赋值 | x **= y | x = x ** y |
| 左移位赋值 | x <<= y | x = x << y |
| 右移位赋值 | x >>= y | x = x >> y |
| 无符号右移位赋值 | x >>>= y | x = x >>> y |
| 按位与赋值 | x &= y | x = x & y |
| 按位异或赋值 | x ^= y | x = x ^ y |
| 按位或赋值 | `x | = y` |
| 逻辑与赋值 | x &&= f() | x && (x = f()) |
| 逻辑或赋值 | `x | |
| 逻辑空赋值 | x ??= f() | x ?? (x = f()) |
解构
对于更复杂的赋值,解构语法是一个能从数组或对象对应的数组结构或对象字面量里提取数据的 Javascript 表达式。
var foo = ["one", "two", "three"];
// 不使用解构
var one = foo[0];
var two = foo[1];
var three = foo[2];
// 使用解构
var [one, two, three] = foo;
比较运算符
比较运算符比较它的操作数并返回一个基于表达式是否为真的逻辑值。
操作数可以是数字,字符串,逻辑,对象值。字符串比较是基于标准的字典顺序,使用 Unicode 值。在多数情况下,如果两个操作数不是相同的类型,JavaScript 会尝试转换它们为恰当的类型来比较。这种行为通常发生在数字作为操作数的比较。类型转换的例外是使用 === 和 !== 操作符,它们会执行严格的相等和不相等比较。这些运算符不会在检查相等之前转换操作数的类型。
| 运算符 | 描述 | 返回 true 的示例 |
|---|---|---|
等于 Equal (==) | 如果两边操作数相等时返回 true。 | 3 == var1 "3" == var1 3 == '3' |
不等于 Not equal (!=) | 如果两边操作数不相等时返回 true | var1 != 4 var2 != "3" |
全等 Strict equal (===) | 两边操作数相等且类型相同时返回 true。参见 Object.is and sameness in JS. | 3 === var1 |
不全等 Strict not equal (!==) | 两边操作数不相等或类型不同时返回 true。 | var1 !== "3" 3 !== '3' |
大于 Greater than (>) | 左边的操作数大于右边的操作数返回 true | var2 > var1 "12" > 2 |
大于等于 Greater than or equal (>=) | 左边的操作数大于或等于右边的操作数返回 true | var2 >= var1 var1 >= 3 |
小于 Less than (<) | 左边的操作数小于右边的操作数返回 true | var1 < var2 "2" < 12 |
小于等于 Less than or equal (<=) | 左边的操作数小于或等于右边的操作数返回 true | var1 <= var2 var2 <= 5 |
算术运算符
算术运算符使用数值 (字面量或者变量) 作为操作数并返回一个数值。
| 运算符 | 描述 | 示例 |
|---|---|---|
求余(%) | 二元运算符。返回相除之后的余数。 | 12 % 5 返回 2。 |
自增(++) | 一元运算符。将操作数的值加一。如果放在操作数前面(++x),则返回加一后的值;如果放在操作数后面(x++),则返回操作数原值,然后再将操作数加一。 | var x=3; console.log(++x); //4 console.log(x); //4 var y=3; console.log(y++); //3 console.log(y); //4 |
自减(--) | 一元运算符。将操作数的值减一。前后缀两种用法的返回值类似自增运算符。 | var x=3; console.log(–x); //输入 2,x=2var y=3;console.log(y–);//输出 3,x=2; |
一元负值符(-) | 一元运算符,返回操作数的负值。 | var x=3; console.log(-x); //输入 -3 |
| 一元正值符(+) | 一元运算符,如果操作数在之前不是数值,试图将其转换为数值。 | console.log( +'3' ); // 3 console.log( '3' ); // '3' console.log(+true); // 1 |
| 指数运算符(**) | 计算底数(base)的指数(exponent)次方,表示为 base^exponent。 | 2 ** 3 返回 8。10 ** -1 返回 0.1。 |
位运算符
位运算符将它的操作数视为 32 位元的二进制串(0 和 1 组成)而非十进制八进制或十六进制数。
| Operator | Usage | Description |
|---|---|---|
| 按位与 AND | a & b | 在 a,b 的位表示中,每一个对应的位都为 1 则返回 1,否则返回 0. |
| 按位或 OR | `a | b` |
| 按位异或 XOR | a ^ b | 在 a,b 的位表示中,每一个对应的位,两个不相同则返回 1,相同则返回 0. |
| 按位非 NOT | ~ a | 反转被操作数的位。 |
| 左移 shift | a << b | 将 a 的二进制串向左移动 b 位,右边移入 0. |
| 算术右移 | a >> b | 把 a 的二进制表示向右移动 b 位,丢弃被移出的所有位。(译注:算术右移左边空出的位是根据最高位是 0 和 1 来进行填充的) |
| 无符号右移 (左边空出位用 0 填充) | a >>> b | 把 a 的二进制表示向右移动 b 位,丢弃被移出的所有位,并把左边空出的位都填充为 0 |
逻辑运算符
逻辑运算符常用于布尔(逻辑)值之间; 当操作数都是布尔值时,返回值也是布尔值。不过实际上&&和||返回的是一个特定的操作数的值,所以当它用于非布尔值的时候,返回值就可能是非布尔值。
| 运算符 | 范例 | 描述 |
|---|---|---|
逻辑与 (&&) | expr1 && expr2 | (逻辑与) 如果 expr1 能被转换为 false,那么返回 expr1;否则,返回expr2。因此,&&用于布尔值时,当操作数都为 true 时返回 true;否则返回 false. |
| 逻辑或 (` | `) | |
逻辑非 (!) | !expr | (逻辑非) 如果操作数能够转换为 true 则返回 false;否则返回 true。 |
能被转换为false的值有null, 0, NaN, 空字符串 (“”) 和undefined。
字符串运算符
除了比较操作符,它可以在字符串值中使用,连接操作符(+)连接两个字符串值相连接,返回另一个字符串,它是两个操作数串的结合。
console.log("my " + "string"); // console logs the string "my string".
简写操作符 += 也可以用来拼接字符串,例如:
var myString = "alpha";
myString += "bet"; // 返回 "alphabet"
条件(三元)运算符
条件运算符是 JavaScript 中唯一需要三个操作数的运算符。运算的结果根据给定条件在两个值中取其一。语法为:
条件 ? 值 1 : 值 2
如果条件为真,则结果取值 1。否则为值 2
表达式
表达式是一组代码的集合,它返回一个值。
每一个合法的表达式都能计算成某个值,但从概念上讲,有两种类型的表达式:有副作用的(比如赋值)和单纯计算求值的。
JavaScript 有以下表达式类型:
288

被折叠的 条评论
为什么被折叠?



