es6(变量的解构赋值)

数组的解构赋值

模式匹配

  • 只要等号两边的模式相同,左边的变量就会被赋予对应的值

对象的解构赋值

  • 数组的元素是按次序排列的,变量的取值由它的位置决定
  • 对象的属性没有次序,变量必须与属性同名,才能取到正确的值
  • {模式:属性}
let obj = {
  p: [
    'Hello',
    { y: 'World' }
  ]
};

let { p: [x, { y }] } = obj;

结果输入:
       x: "hello"
       y: "World"

let obj = {
 p: [
   'Hello',
   { y: 'World' }
 ]
};

let { p, p: [x, { y }] } = obj;

结果输入:
      x: "hello"
      y: "World"
      p: ["Hello", {y: "World"}]

解释说明:
(1)p是模式,不是变量,因此不会被赋值
(2)p是变量,因此可以被赋值


字符串的解构赋值

const [a, b, c, d, e] = 'hello';

结果输入:
       a // "h"
       b // "e"
       c // "l"
       d // "l"
       e // "o"
let {length : len} = 'hello';

结果输入:len // 5

解释说明:

  • 字符串被转换成了一个类似数组的对象
  • 类似数组的对象都有一个length属性,可以对这个属性解构赋值

数值和布尔值的解构赋值

解构赋值规则:只要等号右边的值不是对象或数组,就先将其转为对象。由于undefined和null无法转为对象,所以对它们进行解构赋值,都会报错


函数参数的解构赋值


圆括号问题

不能使用圆括号的情况
(1)变量声明语句——模式不能使用圆括号
(2)函数参数
(3)赋值语句的模式

可以使用圆括号的情况
(1)赋值语句的非模式部分


用途

(1)交换变量的值

let x = 1;
let y = 2;

[x, y] = [y, x];

解释说明: 交换变量x和y的值

(2)从函数返回多个值

function example() {
    return [1, 2, 3];
}
let [a, b, c] = example();
console.table([a,b,c]);

结果输入:在这里插入图片描述

(3)函数参数的定义

  • 可以方便地将一组参数与变量名对应起来
// 参数是一组有次序的值
function f([x, y, z]) { ... }
f([1, 2, 3]);

// 参数是一组无次序的值
function f({x, y, z}) { ... }
f({z: 3, y: 2, x: 1});

(4)提取 JSON 数据

  • 提取 JSON 对象中的数据
let jsonData = {
  id: 42,
  status: "OK",
  data: [867, 5309]
};

let { id, status, data: number } = jsonData;

console.log(id, status, number);

结果输入:42, "OK", [867, 5309]

(5)函数参数的默认值

jQuery.ajax = function (url, {
  async = true,
  beforeSend = function () {},
  cache = true,
  complete = function () {},
  crossDomain = false,
  global = true,
  // ... more config
} = {}) {
  // ... do stuff
};

(6)遍历 Map 结构

const map = new Map();
map.set('first', 'hello');
map.set('second', 'world');

for (let [key, value] of map) {
  console.log(key + " is " + value);
}

结果输入:first is hello
second is world


 // 获取键名
for (let [key] of map) {
  // ...
}

// 获取键值
for (let [,value] of map) {
  // ...
}

(7)输入模块的指定方法

const { SourceMapConsumer, SourceNode } = require("source-map");
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值