跳至主要內容

运算符

wzCoding大约 6 分钟JavaScript运算符

运算符

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 中有两个类型运算符:typeofinstanceof

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