ES6精華:解構賦值

按必定的匹配模式,從數組或對象中解構出相應值,並賦值給變量。數組

let [a] = [3]; // a = 3
let [, a] = [3, [7]]; // a = [7]
let {a} = {a: 3}; // a = 3,{a} 至關 {a: a}
let {a: {b}} = {a: {b: 3}}; // b = 3

應用舉例

快速的聲明並賦予相應的屬性值函數

// --- 之前
let id = obj.id;
let name = obj.name;
let ago = obj.ago;

// --- 如今
let { id, name, ago } = obj;

函數配置參數的解構和賦默認值code

// --- 之前
function dealUser(id, conf) {
  let name = conf.name || '';
  let ago = conf.ago || 0;
}

// --- 如今
// 能夠直接使用 name 等,以及設置默認值(類型也易見)。
function dealUser(id, {
  name = '',
  ago = 0
}) {
  // 函數體
}

解構非對象

當解構的目標爲非對象時,會將目標轉化成相應類型的對象。
NaN能夠使用Number構造函數生成,能夠被解構。
nullundefined是單值,沒有相應的構造函數,不能被解構。對象

let {length: a} = 'ab'; // a = 2
// 等價於
let {length: a} = new String('ab'); // a = 2

let {toString: a} = NaN; // a = function
let {toString: a} = null; // 報錯

解構方式

左側的解構符決定如何看待右側的解構值。
解構符{}意味着視右側的值爲對象,採用對象解構。
解構符[]意味着視右側的值爲數組,採用數組解構。
以此能夠推斷:數組即支持數組解構也支持對象解構。接口

原生類數組對象有迭代接口,也支持兩種解構。(arguments, NodeList, new String()io

let [a] = 'ab'; // a = 'a',a 爲第一個元素。
let {length: a} = 'ab'; // a = 2
let {length: a} = ['a', 'b']; // a = 2
let [a] = {0: a, length: 1}; // 報錯,自定義對象沒有迭代接口。

解構失敗

解構不成功

右側沒有相對應的值,解構不報錯,變量值爲undefinedfunction

let [a, b] = [1]; // a = 1, b = undefined

解構出錯

當右側值(包括轉換後)不知足左側要求的類型時,解構失敗。class

let [[a]] = [1]; // 報錯,目標 1 不是數組。
let [a] = {a: 3}; // 報錯,目標 {a: 3} 不是數組。

指定默認值

能夠爲待賦值的變量指定默認值。
默認值能夠使用解構中其餘變量,但該變量的解構必須在此以前。變量

let [a, b = 2] = [1]; // a = 1, b = 2
let [a, b = a] = [1]; // a = 1, b = 1
相關文章
相關標籤/搜索