JavaScript:运算符
2026/7/20 17:50:22 网站建设 项目流程

第三阶段:运算符

  1. 赋值运算符:
  • =:基本赋值,let a = 5;
  • +=:相加后赋值,let b = 3; b += 2; // b 变为 5
  • -=:相减后赋值,let c = 5; c-= 2; // c 变为 3
  • *=:相乘后赋值,let d = 2; d *= 3; // d 变为 6
  • /=:相除后赋值,let e = 6; e /= 2; // e 变为 3
  • %=:取模后赋值,let f = 5; f %= 2; // f 变为 1
  • **=「ES6+」:幂运算后赋值,let g = 2; g **= 3; // g 变为 8
  • &&=「ES6+」:逻辑与后赋值,如果左边为真,才赋值右边的值。let h = true; let i = 5; h &&= i; // h 变为 5
  • ||=「ES6+」:逻辑或后赋值,如果左边为假,才赋值右边的值。let j = false; let k = 10; j ||= k; // j 变为 10
  • ??=「ES6+」:空值合并后赋值,如果左边为nullundefined,才赋值右边的值。let l; l??= 20; // l 变为 20
  1. 算术运算符:
  • ± * / %:加、减、乘、除、取模。let result1 = 5 + 3; // 8let result2 = 5- 3; // 2let result3 = 5 * 3; // 15let result4 = 5 / 3; // 1.666...let result5 = 5 % 3; // 2

  • ++ 自增、-- 自减

    ++/-- 在后,先使用再 ++/-- :

    let m = 3; let n = m++; // n 为 3,m 变为 4

    ++/-- 在前,先 ++/-- 再使用:let o = 3; let p =--o; // p 为 2,o 变为 2

  • *幂运算「ES6+」*:let q = 2 ** 3; // 8

  1. 比较运算符:
  • > < >= <=:大于、小于、大于等于、小于等于。let r = 5 > 3; // truelet s = 5 < 3; // false
  • == 宽松相等、=== 严格相等==会进行类型转换再比较,===不进行类型转换直接比较,类型和值都必须相等才为真。let t1 = 5 == '5'; // truelet t2 = 5 === '5'; // false
  • !=、!==:宽松不等、严格不等。let u1 = 5!= 3; // truelet u2 = 5!== '5'; // true
  1. 逻辑运算符:
  • && 与:两边都为真才为真。console.log(true && false); // false
  • || 或:只要一边为真就为真。console.log(true || false); // true
  • ! 非:取反。console.log(!true); // false
  1. 空值合并运算符??「ES6+」:如果左边值为nullundefined,返回右边值,否则返回左边值。let w1 = null?? 10; // 10let w2 = 5?? 10; // 5

  2. 可选链操作符?.「ES6+」:

  • 对象?. 属性:安全访问对象属性,若对象为nullundefined不会报错。let obj = {sub: {prop: 'value'}}; let value = obj?.sub?.prop; // value 为 'value'
  • 数组?.[]:安全访问数组元素。let arr = [1, 2]; let element = arr?.[1]; // element 为 2,如果arrnullundefined,返回undefined
  • 函数?.():安全调用函数。let func; let res = func?.(); // res 为 undefined,如果funcnullundefined不会报错,而是返回undefined
  1. 三元运算符 条件?a : b:如果条件为真返回a,为假返回blet x = 5 > 3? 'yes' : 'no'; // 'yes'

  2. 位运算符:

  • &:按位与,对每一位进行与运算(对应位都为 1 才为 1)。let y1 = 5 & 3; // 1(5 的二进制是 101,3 的二进制是 011,按位与后为 001 即 1)
  • |:按位或,对每一位进行或运算(对应位有一个为 1 就为 1)。let y2 = 5 | 3; // 7(二进制运算:101 | 011 = 111 即 7)
  • ^:按位异或,对每一位进行异或运算(对应位不同为 1,相同为 0)。let y3 = 5 ^ 3; // 6(二进制:101 ^ 011 = 110 即 6)
  • ~:按位取反,对每一位取反。let y4 = ~5; //-6(5 的二进制 101 取反为 010,在 JavaScript 中以补码形式表示负数,010 补码为 110 即-6)
  • << >> >>>:左移(将二进制数左移指定位数,右边补 0)、有符号右移(将二进制数右移指定位数,左边补符号位)、无符号右移(将二进制数右移指定位数,左边补 0)。let y5 = 5 << 1; // 10(5 的二进制 101 左移一位为 1010 即 10)
  1. 逗号运算符,:从左到右计算表达式,返回最后一个表达式的值。let z1 = (1 + 2, 3 + 4); // 7
  2. in 运算符:检测属性是否存在对象。let person = {name: 'John'}; let hasName = 'name' in person; // true
  3. delete 运算符:删除对象属性。let person2 = {age: 30}; delete person2.age; // person2 变为 {}
  4. new 运算符:实例化构造函数。function Animal() {}; let myAnimal = new Animal();
  5. 展开运算符 …「ES6+」:
  • 数组展开:将数组展开成多个元素。例如:
constarr1=[1,2];constarr2=[...arr1,3,4];console.log(arr2);// [1, 2, 3, 4]
  • 对象展开:将对象展开成多个键值对。例如:
constobj1={name:'Tom'};constobj2={...obj1,age:20};console.log(obj2);// {name: 'Tom', age: 20}
  • 函数传参展开:将数组展开作为函数参数。例如:
functionadd(a,b){returna+b;}constnumbers=[3,5];constresult=add(...numbers);console.log(result);// 8
  1. 运算优先级、括号改变优先级规则
  • 优先级从高到低:括号()最高,其次是一元运算符(如!++--等),然后是算术运算符(*/%高于+-),接着是比较运算符,再是逻辑运算符(&&高于||),最后是赋值运算符。
  • 括号可以改变优先级,例如(2 + 3) * 4先计算括号内的加法,再进行乘法。

实战练习:

  1. 对比 == 与 === 多组测试用例
  2. 展开运算符合并数组、合并对象、函数传参

思考题:

  1. || 和??空值合并运算符区别?
  2. 展开运算符是浅拷贝还是深拷贝?
  3. delete 能删除 var 声明的全局变量吗?

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询