欢迎光临
我们一直在努力

JavaScript:运算符

第三阶段:运算符

  • 赋值运算符:
    • =:基本赋值,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+」:空值合并后赋值,如果左边为 null 或 undefined,才赋值右边的值。let l; l??= 20; // l 变为 20
  • 算术运算符:
    • ± * / %:加、减、乘、除、取模。let result1 = 5 + 3; // 8,let result2 = 5- 3; // 2,let result3 = 5 * 3; // 15,let 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

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

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

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

  • 位运算符:

    • &:按位与,对每一位进行与运算(对应位都为 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)
  • 逗号运算符,:从左到右计算表达式,返回最后一个表达式的值。let z1 = (1 + 2, 3 + 4); // 7
  • in 运算符:检测属性是否存在对象。let person = {name: 'John'}; let hasName = 'name' in person; // true
  • delete 运算符:删除对象属性。let person2 = {age: 30}; delete person2.age; // person2 变为 {}
  • new 运算符:实例化构造函数。function Animal() {}; let myAnimal = new Animal();
  • 展开运算符 …「ES6+」:
    • 数组展开:将数组展开成多个元素。例如:

    const arr1 = [1, 2];
    const arr2 = [arr1, 3, 4];
    console.log(arr2); // [1, 2, 3, 4]

    • 对象展开:将对象展开成多个键值对。例如:

    const obj1 = {name: 'Tom'};
    const obj2 = {obj1, age: 20};
    console.log(obj2); // {name: 'Tom', age: 20}

    • 函数传参展开:将数组展开作为函数参数。例如:

    function add(a, b) {
    return a + b;
    }
    const numbers = [3, 5];
    const result = add(numbers);
    console.log(result); // 8

  • 运算优先级、括号改变优先级规则:
    • 优先级从高到低:括号 () 最高,其次是一元运算符(如 !、++、– 等),然后是算术运算符(*、/、% 高于 +、-),接着是比较运算符,再是逻辑运算符(&& 高于 ||),最后是赋值运算符。
    • 括号可以改变优先级,例如 (2 + 3) * 4 先计算括号内的加法,再进行乘法。

    实战练习:

  • 对比 == 与 === 多组测试用例
  • 展开运算符合并数组、合并对象、函数传参
  • 思考题:

  • || 和??空值合并运算符区别?
  • 展开运算符是浅拷贝还是深拷贝?
  • delete 能删除 var 声明的全局变量吗?
  • 赞(0)
    未经允许不得转载:171主机测评 » JavaScript:运算符
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址