字符串、数值、布尔值、函数参数的解构赋值

字符串可以被解构赋值是因为字符串被转换成一个类似数组的对象

    const [a, b, c, d, e] = 'HELLO';
    console.log(a, b, c, d, e); // H E L L O

类似数组的对象都会有一个length属性,因此可以对这个属性解构赋值

    const { length: len } = 'MRWANG';
    console.log(len); // 6

数值和布尔值的解构赋值

解构赋值时,等号右边是数值和布尔值,会先转为对象

数值和布尔值的包装对象都有toString属性,所以变量可以取到值

    let { toString: s } = 123;
    console.log(s === Number.prototype.toString); // true
    let { toString: x } = true;
    console.log(x === Boolean.prototype.toString);// true

解构赋值的规则:只要等号右边的值不是对象或数组,就先将其转为对象,否则报错;

    let { prop : x } = undefined; // 报错
    let { prop : y } = null; // 报错

函数参数的解构赋值

    function add([a, b]) {
        return a + b;
    }
    console.log(add([1, 1])); // 2
    console.log(add([2, 2])); // 4

add的参数表面上是个数组,传入参数的那一刻,数组参数就被解构成a和b。

举个(同上)

    let num = [
        [1, 2],
        [3, 4]
    ].map(([a, b]) => a + b);
    console.log(num) // [3, 7]

函数参数的解构也可以使用默认值
NO、1

  • 这个例子是给函数中的x和y变量指定默认值

      function move({ x = 0, y = 0 } = {}) {
          console.log(x, y);
          return [x, y]
      }
      move({ x: 1, y: 1 }); // 1 1
      move({ x: 3 }); // 3 0 
      move({}); // 0 0
      move({}); // 0 0
    

NO、2

  • 这个例子是给函数move的参数指定默认值,得到的与上面的解构是不同的

      function move({ x, y } = { x: 0, y: 0 }) {
          console.log(x, y);
          return [x, y]
      }
      move({ x: 1, y: 1 }); // 1 1
      move({ x: 3 }); // 3 undefined
      move({}); // undefined undefined
      move({}); // undefined undefined
    

undefined就会触发函数参数的默认值

    let arrs = [1, undefined, 3].map((x = 'x') => x)
    console.log(arrs); // [1, "x", 3]

你可能感兴趣的:(字符串、数值、布尔值、函数参数的解构赋值)