JavaScript运算符
在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');
}