在JavaScript开发中,运算符是编程的基础工具。它们用于执行各种操作,从简单的数学计算到复杂的逻辑判断。本文将深入探讨JavaScript中的各种运算符,包括算术运算符、比较运算符、布尔运算符、位运算符以及其他一些特殊运算符。
一、算术运算符
JavaScript提供了多种算术运算符,用于执行基本的数学运算。这些运算符包括:
- 加法运算符:
x + y - 减法运算符:
x - y - 乘法运算符:
x * y - 除法运算符:
x / y - 指数运算符:
x ** y - 余数运算符:
x % y - 自增运算符:
++x或x++ - 自减运算符:
--x或x-- - 数值运算符:
+x - 负数值运算符:
-x
(一)加法运算符
加法运算符(+)是最常见的运算符,用于求两个数值的和。它还可以用于字符串的连接。
1 + 1 // 2
'a' + 'b' // "ab"
1 + 'a' // "1a"
如果一个运算子是字符串,另一个运算子是非字符串,非字符串会转成字符串,再进行连接。
(二)余数运算符
余数运算符(%)返回前一个运算子被后一个运算子除所得的余数。需要注意的是,运算结果的正负号由第一个运算子的正负号决定。
12 % 5 // 2
-1 % 2 // -1
(三)自增和自减运算符
自增和自减运算符会修改原始变量的值。它们可以放在变量之前或之后,这会影响运算的顺序。
var x = 1;
++x // 2
x++ // 2
(四)数值运算符和负数值运算符
数值运算符(+)和负数值运算符(-)可以将任何值转为数值。
+true // 1
+[] // 0
+{} // NaN
二、比较运算符
比较运算符用于比较两个值的大小,返回一个布尔值。JavaScript提供了以下比较运算符:
>大于<小于<=小于或等于>=大于或等于==相等===严格相等!=不相等!==严格不相等
(一)严格相等运算符
严格相等运算符(===)比较两个值是否为“同一个值”。如果两个值不是同一类型,直接返回false。
1 === '1' // false
(二)相等运算符
相等运算符(==)比较两个值是否相等,会进行类型转换。
1 == '1' // true
(三)比较字符串
字符串按照字典顺序进行比较。
'cat' > 'dog' // false
三、布尔运算符
布尔运算符用于将表达式转为布尔值。主要的布尔运算符包括:
- 取反运算符:
! - 且运算符:
&& - 或运算符:
|| - 三元条件运算符:
?:
(一)取反运算符
取反运算符(!)用于将布尔值变为相反值。
!true // false
!false // true
(二)且运算符
且运算符(&&)用于多个表达式的求值。如果第一个运算子的布尔值为true,则返回第二个运算子的值;否则返回第一个运算子的值。
't' && 'f' // "f"
'' && 'f' // ""
(三)或运算符
或运算符(||)用于多个表达式的求值。如果第一个运算子的布尔值为true,则返回第一个运算子的值;否则返回第二个运算子的值。
't' || 'f' // "t"
'' || 'f' // "f"
(四)三元条件运算符
三元条件运算符(?:)用于根据条件返回不同的值。
't' ? 'hello' : 'world' // "hello"
0 ? 'hello' : 'world' // "world"
四、位运算符
位运算符用于对数字的二进制表示进行操作。主要的位运算符包括:
- 按位非:
~ - 按位与:
& - 按位或:
| - 按位异或:
^ - 按位移位:
<<和>>
(一)按位非
按位非运算符(~)会将数字转为32位二进制整数,然后反转每一位。
~5 // -6
(二)按位与
按位与运算符(&)对两个数的每一位执行按位与运算。
12 & 10 // 8
(三)按位或
按位或运算符(|)对两个数的每一位执行按位或运算。
12 | 10 // 14
(四)按位异或
按位异或运算符(^)对两个数的每一位执行按位异或运算。
12 ^ 10 // 6
(五)按位移位
按位移位运算符(<< 和 >>)用于将数字的二进制表示向左或向右移动指定的位数。
2 << 2 // 8
16 >> 1 // 8
五、其他运算符
(一)void 运算符
void 运算符用于执行一个表达式,然后返回undefined。
void 0 // undefined
(二)逗号运算符
逗号运算符用于对两个表达式求值,并返回后一个表达式的值。
'a', 'b' // "b"
六、真题解答
下面代码中,a 在什么情况下会执行输出语句打印 1 ?
var a = ?;
if(a == 1 && a == 2 && a == 3){
console.log(1);
}
参考答案:
方法一:利用 toString() 方法
var a = {
i: 1,
toString() {
return a.i++;
}
}
if (a == 1 && a == 2 && a == 3) {
console.log('1');
}
方法二:利用 valueOf() 方法
var a = {
i: 1,
valueOf() {
return a.i++
}
}
if (a == 1 && a == 2 && a == 3) {
console.log('1');
}