运算符
赋值运算符
赋值运算符将它右边操作数的值赋给它左边的操作数。最简单的赋值运算符是等于(=),它将右边的操作数值赋给左边的操作数。那么 x = y 就是将 y 的值赋给 x。
还有一些复合赋值操作符,它们是下表列出的这些操作的简写:
名字 | 简写的运算符 | 含义 |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
字符串运算符
可以在字符串值中使用,连接操作符(+)连接两个字符串值相连接,返回另一个字符串,
简写操作符 += 也可以用来拼接字符串
console.log("my " + "string"); // console logs the string "my string".
var myString = "alpha";
myString += "bet"; // 返回 "alphabet"
算数运算符
算术运算符使用数值 (字面量或者变量) 作为操作数并返回一个数值。标准的算术运算符就是加减乘除 (+ - * /)。当操作数是浮点数时,这些运算符表现得跟它们在大多数编程语言中一样(特殊要注意的是,除零会产生Infinity)。例如:
Js
1 / 2; // 0.5
1 / 2 == 1.0 / 2.0; // true
运算符 | 描述 | 示例 |
求余(%) | 二元运算符。返回相除之后的余数。 | 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。 |
比较运算符
比较运算符用于对两个数据进行比较,比较结果是布尔值 true 或 false
运算符 | 描述 | 返回 true 的示例 |
等于 Equal (==) | 如果两边操作数相等时返回 true。 | 3 == var1 "3" == var1 3 == '3' |
不等于 Not equal (!=) | 如果两边操作数不相等时返回 true | var1 != 4 var2 != "3" |
全等 Strict equal (===) | 两边操作数相等且类型相同时返回 true。参 | 3 === var1 |
不全等 Strict not equal (!==) | 两边操作数不相等或类型不同时返回 true。 | var1 !== "3" 3 !== '3' |
大于 Greater than (>) | 左边的操作数大于右边的操作数返回 true | var2 > var1 "12" > 2 |
左边的操作数大于或等于右边的操作数返回 true | var2 >= var1 var1 >= 3 | |
小于 Less than (<) | 左边的操作数小于右边的操作数返回 true | var1 < var2 "2" < 12 |
左边的操作数小于或等于右边的操作数返回 true | var1 <= var2 var2 <= 5 |
==、!=在比较不相同类型的数据时,首先会自动将要进行比较的数据转换成相同的 数据类型,然后再进行比较。
===、!==在比较不相同类型的数据时,不会进行数据类型的转换。
逻辑运算符
逻辑运算符常用于布尔(逻辑)值之间; 当操作数都是布尔值时,返回值也是布尔值。不过实际上&&和||返回的是一个特定的操作数的值,所以当它用于非布尔值的时候,返回值就可能是非布尔值。逻辑运算符的描述如下。
运算符 | 范例 | 描述 |
逻辑与 (&&) | expr1 && expr2 | (逻辑与) 如果 expr1 能被转换为 false,那么返回 expr1;否则,返回expr2。因此,&&用于布尔值时,当操作数都为 true 时返回 true;否则返回 false. |
逻辑或 (||) | expr1 || expr2 | (逻辑或) 如果 expr1 能被转换为 true,那么返回 expr1;否则,返回expr2。因此,|| 用于布尔值时,当任何一个操作数为 true 则返回 true;如果操作数都是 false 则返回 false。 |
逻辑非 (!) | !expr | (逻辑非) 如果操作数能够转换为 true 则返回 false;否则返回 true。 |
// 逻辑“与”
console.log(123 && 456); // 输出结果:456
console.log(0 && 456); // 输出结果:0
console.log(2 > 1 && 3 > 1); // 输出结果:true
console.log(2 < 1 && 3 > 1); // 输出结果:false
// 逻辑“或”
console.log(123 || 456); // 输出结果:123
console.log(0 || 456); // 输出结果:456
console.log(2 > 1 || 3 < 1); // 输出结果:true
console.log(2 < 1 || 3 < 1); // 输出结果:false
// 逻辑“非”
console.log(!(2 > 1)); // 输出结果:false
console.log(!(2 < 1)); // 输出结果:true
如果通过左表达式能够确定最终值时,则不运算右表达式的值,此时称为短路。
短路效果的示例代码如下。
var num = 1;
false && num++; // && 短路情况
console.log(num); // 输出结果:1
三元运算符
三元运算符也称为三元表达式,使用问号“?”和冒号“:”两个符号来连接,,运算的结果根据给定条件在两个值中取其一。语法为:
条件 ? 值 1 : 值 2
如果条件为真,则结果取值 1。否则为值 2。你能够在任何允许使用标准运算符的地方使用条件运算符。
var age = 15;
var status = age >= 18 ? '已成年' : '未成年';
console.log(status); // 输出结果:未成年
位运算符
位运算符将它的操作数视为 32 位元的二进制串(0 和 1 组成)而非十进制八进制或十六进制数。例如:十进制数字 9 用二进制表示为 1001,位运算符就是在这个二进制表示上执行运算,但是返回结果是标准的 JavaScript 数值
Operator | Usage | Description |
按位与 AND | a & b | 在 a,b 的位表示中,每一个对应的位都为 1 则返回 1,否则返回 0. |
按位或 OR | a | b | 在 a,b 的位表示中,每一个对应的位,只要有一个为 1 则返回 1,否则返回 0. |
按位异或 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 |
运算符优先级
运算符的优先级,用于确定一个表达式的计算顺序。在你不能确定优先级时,可以通过使用括号显式声明运算符的优先级。
JavaScript 中运算符的优先级,表中由上至下递减,结合方向表示同级运算符执行顺序