解構(gòu)賦值注意事項(xiàng)與用途

  • 不能使用圓括號(hào)的情況
    以下三種解構(gòu)賦值不得使用圓括號(hào)
    (1)變量聲明語(yǔ)句
  // 全部報(bào)錯(cuò)
  let [(a)] = [1];
  let {x: (c)} = {};
  let ({x: c}) = {};
  let {(x: c)} = {};
  let {(x): c} = {};
  let { o: ({ p: p }) } = { o: { p: 2 } };

上面 6 個(gè)語(yǔ)句都會(huì)報(bào)錯(cuò),因?yàn)樗鼈兌际亲兞柯暶髡Z(yǔ)句,模式不能使用圓括號(hào)

(2)函數(shù)參數(shù); 函數(shù)參數(shù)也屬于變量聲明,因此不能帶有圓括號(hào)

// 報(bào)錯(cuò)
  function f([(z)]) { return z; }
  function f([z,(x)]) { return x; }

(3)賦值語(yǔ)句的模式

  // 全部報(bào)錯(cuò)
  ({ p: a }) = { p: 42 };
  ([a]) = [5];

上面代碼將整個(gè)模式放在圓括號(hào)之中,導(dǎo)致報(bào)錯(cuò)。

  // 報(bào)錯(cuò)
  [({ p: a }), { x: c }] = [{}, {}];

上面代碼將一部分模式放在圓括號(hào)之中,導(dǎo)致報(bào)錯(cuò)。

  • 可以使用圓括號(hào)的情況只有一種:賦值語(yǔ)句的非模式部分,可以使用圓括號(hào)
  [(b)] = [3]; // 正確
  ({ p: (d) } = {}); // 正確
  [(parseInt.prop)] = [3]; // 正確
  • 用途
    (1)交換變量的值
  let x = 1;
  let y = 2;
  [x, y] = [y, x];

上面代碼交換變量x和y的值,這樣的寫法不僅簡(jiǎn)潔,而且易讀,語(yǔ)義非常清晰。

(2)函數(shù)只能返回一個(gè)值,如果要返回多個(gè)值,只能將它們放在數(shù)組或?qū)ο罄锓祷? 解構(gòu)賦值取出值就方便

// 返回一個(gè)數(shù)組
function example() {
  return [1, 2, 3];
}
let [a, b, c] = example();
// 返回一個(gè)對(duì)象
function example() {
  return {
    foo: 1,
    bar: 2
  };
}
let { foo, bar } = example();

(3)函數(shù)參數(shù)的定義; 解構(gòu)賦值可以方便地將一組參數(shù)與變量名對(duì)應(yīng)起來(lái)

  // 參數(shù)是一組有次序的值
  function f([x, y, z]) { ... }
  f([1, 2, 3]);
  // 參數(shù)是一組無(wú)次序的值
  function f({x, y, z}) { ... }
  f({z: 3, y: 2, x: 1});

(4)提取 JSON 數(shù)據(jù); 解構(gòu)賦值對(duì)提取 JSON 對(duì)象中的數(shù)據(jù),尤其有用

  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)函數(shù)參數(shù)的默認(rèn)值

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

指定參數(shù)的默認(rèn)值,就避免了在函數(shù)體內(nèi)部再寫var foo = config.foo || 'default foo';這樣的語(yǔ)句。

(6)遍歷 Map 結(jié)構(gòu)

任何部署了 Iterator 接口的對(duì)象,都可以用for...of循環(huán)遍歷。Map 結(jié)構(gòu)原生支持 Iterator 接口,配合變量的解構(gòu)賦值,獲取鍵名和鍵值就非常方便。

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)輸入模塊的指定方法; 加載模塊時(shí),往往需要指定輸入哪些方法。解構(gòu)賦值使得輸入語(yǔ)句非常清晰。

  const { SourceMapConsumer, SourceNode } = require("source-map");
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1.數(shù)組的解構(gòu)賦值 2.對(duì)象的解構(gòu)賦值 3.字符串的解構(gòu)賦值 4.數(shù)值和布爾值的解構(gòu)賦值 5.函數(shù)參數(shù)的解構(gòu)賦值 ...
    卞卞村長(zhǎng)L閱讀 952評(píng)論 0 0
  • 基本用法 ES6 允許按照一定模式,從數(shù)組和對(duì)象中提取值,對(duì)變量進(jìn)行賦值,這被稱為解構(gòu)(Destructuring...
    嘉奇呦_nice閱讀 824評(píng)論 0 2
  • 數(shù)組的解構(gòu)賦值 對(duì)象的解構(gòu)賦值 字符串的解構(gòu)賦值 數(shù)值和布爾值的解構(gòu)賦值 函數(shù)參數(shù)的解構(gòu)賦值 圓括號(hào)問(wèn)題 用途 數(shù)...
    皇甫貝閱讀 397評(píng)論 0 0
  • 數(shù)組的解構(gòu)賦值 基本用法 ES6允許按照一定模式,從數(shù)組和對(duì)象中提取值,對(duì)變量進(jìn)行賦值,這被稱為解構(gòu)(Destru...
    呼呼哥閱讀 472評(píng)論 0 3
  • 數(shù)組的解構(gòu)賦值 基本用法 ES6允許按照一定模式,從數(shù)組和對(duì)象中提取值,對(duì)變量進(jìn)行賦值,這被稱為解構(gòu)(Destru...
    陳老板_閱讀 426評(píng)論 0 0

友情鏈接更多精彩內(nèi)容