运算符
运算符
JavaScript 中有许多不同类型的运算符,包括算术运算符、比较运算符、逻辑运算符、赋值运算符、位运算符和其他运算符
算术运算符
算术运算符用于执行基本的数学运算。这些运算符包括:
- 加法(
+
):将两个操作数相加 - 减法(
-
):从第一个操作数中减去第二个操作数 - 乘法(
*
):将两个操作数相乘 - 除法(
/
):将第一个操作数除以第二个操作数 - 取模(
%
):返回第一个操作数除以第二个操作数的余数 - 指数(
**
):返回第一个操作数的第二个操作数次幂
let x = 5
let y = 2
console.log(x + y) // 7
console.log(x - y) // 3
console.log(x * y) // 10
console.log(x / y) // 2.5
console.log(x % y) // 1
console.log(x ** y) // 25
比较运算符
比较运算符用于比较两个值。这些运算符包括:
- 等于(
==
):如果两个操作数相等,则返回 true - 不等于(
!=
):如果两个操作数不相等,则返回 true - 全等(
===
):如果两个操作数相等且类型相同,则返回 true - 不全等(
!==
):如果两个操作数不相等或类型不同,则返回 true - 大于(
>
):如果第一个操作数大于第二个操作数,则返回 true - 大于等于(
>=
):如果第一个操作数大于或等于第二个操作数,则返回 true - 小于(
<
):如果第一个操作数小于第二个操作数,则返回 true - 小于等于(
<=
):如果第一个操作数小于或等于第二个操作数,则返回 true
let x = 5
let y = '5'
console.log(x == y) // true
console.log(x != y) // false
console.log(x === y) // false
console.log(x !== y) // true
console.log(x > y) // false
console.log(x >= y) // true
console.log(x < y) // false
console.log(x <= y) // true
逻辑运算符
逻辑运算符用于测试多个条件。这些运算符包括:
- 与(
&&
):如果两个操作数都为 true,则返回 true - 或(
||
):如果两个操作数中至少有一个为 true,则返回 true - 非(
!
):如果操作数为 true,则返回 false;如果操作数为 false,则返回 true
let x = 5
let y = 3
console.log(x > 0 && y > 0) // true
console.log(x > 0 && y < 0) // false
console.log(x < 0 || y < 0) // false
console.log(!(x > 0)) // false
赋值运算符
赋值运算符用于将值赋给变量。这些运算符包括:
- 赋值(
=
):将右侧操作数的值赋给左侧操作数 - 加赋值(
+=
):将右侧操作数加上左侧操作数的值,然后将结果赋给左侧操作数 - 减赋值(
-=
):将左侧操作数减去右侧操作数的值,然后将结果赋给左侧操作数 - 乘赋值(
*=
):将右侧操作数乘以左侧操作数的值,然后将结果赋给左侧操作数 - 除赋值(
/=
):将左侧操作数除以右侧操作数的值,然后将结果赋给左侧操作数 - 取模赋值(
%=
):将左侧操作数除以右侧操作数的余数,然后将结果赋给左侧操作数 - 指数赋值(
**=
):将左侧操作数进行右侧操作数次幂计算,然后将结果赋给左侧操作数
let x = 5
let y = 2
console.log(x += y) // x = x + y = 7
console.log(x -= y) // x = x - y = 5
console.log(x *= y) // x = x * y = 10
console.log(x /= y) // x = x / y = 5
console.log(x %= y) // x = x % y = 1
console.log(x **= y) // x = x ** y = 25
位运算符
位运算符用于对整数进行二进制位操作。这些运算符包括:
- 按位与(
&
):对两个操作数的每一位执行逻辑与操作 - 按位或(
|
):对两个操作数的每一位执行逻辑或操作 - 按位异或(
^
):对两个操作数的每一位执行逻辑异或操作 - 按位非(
~
):对操作数的每一位执行逻辑非操作 - 左移(
<<
):将左侧操作数的二进制表示向左移动右侧操作数指定的位数 - 有符号右移(
>>
):将左侧操作数的二进制表示向右移动右侧操作数指定的位数,保留符号位 - 无符号右移(
>>>
):将左侧操作数的二进制表示向右移动右侧操作数指定的位数,不保留符号位
let x = 5 // 0101
let y = 3 // 0011
console.log(x & y) // 0001
console.log(x | y) // 0111
console.log(x ^ y) // 0110
console.log(~x) // 1010
console.log(x << y) // 0101000
console.log(x >> y) // 0000
console.log(x >>> y) // 0000
在 JavaScript 中,整数通常用 32 位二进制补码形式表示。这意味着每个整数都用 32 位二进制数表示,不足 32 位的前面补 0
例如,5 的二进制表示为 101
,但是由于 JavaScript 中整数用 32 位二进制补码形式表示,所以我们需要在前面补上 29 个 0,得到 00000000000000000000000000000101
将一个负整数转换为二进制,我们可以先取它的绝对值,然后将其转换为二进制,再取反并加 1
例如,要将 -5 转换为二进制,我们可以按照以下步骤进行:
- 取绝对值:
5
- 转换为二进制:
00000000000000000000000000000101
- 取反:
11111111111111111111111111111010
- 加 1:
11111111111111111111111111111011
最后求出 -5 的二进制表示为 11111111111111111111111111111011
其他的运算符
在 JavaScript 中除了上述的运算符以外,还有一些其他的常用的运算符,包括三元条件运算符、逗号运算符、类型运算符、实例化运算符
三元条件运算符
三元条件运算符(? :
)用于根据条件执行不同的操作。它的用法为:
condition ? exprIfTrue : exprIfFalse
其中,condition 是一个表达式,用于判断条件是否成立。如果 condition 为 true,则执行 exprIfTrue;否则执行 exprIfFalse
let x = 5
let y = 3
let max = x > y ? x : y
console.log(max) // 5
逗号运算符
逗号运算符(,
)用于连接多个表达式。它会按照从左到右的顺序依次计算每个表达式,并返回最后一个表达式的值
let x = 1
x = (x++, x) // 2
在上面的例子中,我们使用逗号运算符连接了两个表达式:x++ 和 x。由于逗号运算符会返回最后一个表达式的值,所以 x 的值为 2
类型运算符
在 JavaScript 中有两个类型运算符:typeof
和 instanceof
typeof
用于返回一个值的数据类型,例如:
let x = 'hello'
console.log(typeof x) // string
instanceof
用于检查一个对象是否为指定构造函数的实例,例如:
let obj = new Object()
console.log(obj instanceof Object) // true
实例化运算符
实例化运算符,既是我们常用的 new
,new 运算符用于创建一个指定类型的新对象。它的用法为:
new constructor[([arguments])]
其中,constructor 是一个构造函数,用于指定新对象的类型。arguments 是一个可选参数,用于传递给构造函数,例如:
let d = new Date("2023-07-11")
console.log(d) //Tue Jul 11 2023 08:00:00 GMT+0800 (中国标准时间)
console.log(d instanceof Date) // true