国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

ECMAScript6(2):解構(gòu)賦值

tinylcy / 3283人閱讀

摘要:解構(gòu)賦值解構(gòu)賦值簡(jiǎn)單來(lái)說(shuō)就是對(duì)應(yīng)位置數(shù)組或?qū)?yīng)鍵名對(duì)象的變量匹配過(guò)程。字符串集合使用結(jié)構(gòu)賦值實(shí)現(xiàn)疊加并交換變量對(duì)象的解構(gòu)賦值對(duì)象的解構(gòu)賦值與變量位置次序無(wú)關(guān)只取決于鍵名是否嚴(yán)格相等。

解構(gòu)賦值

解構(gòu)賦值簡(jiǎn)單來(lái)說(shuō)就是 對(duì)應(yīng)位置(數(shù)組)或?qū)?yīng)鍵名(對(duì)象)的變量匹配過(guò)程。如果匹配失敗, 對(duì)于一般變量匹配不到結(jié)果就是 undefined, 對(duì)于具有展開(kāi)運(yùn)算符(...)的變量結(jié)果就是空數(shù)組。

數(shù)組的解構(gòu)賦值
var [a, b, c] = [1, 2, 3];   //a=1, b=2, c=3
var [, , c] = [1, 2, 3];   //c=3
var [x, , y] = [1, 2, 3];  //x=1, y=3
var [head, ...tail] = [1, 2, 3, 4];   //head = 1, tail = [2, 3, 4];
var [x, y, ...z] = [1];   //x=1, y=undefined, z=[];
var [a, [b, c], d] = [1, [2, 3], 4];   //a=1.b=2, c=3, d=4
var [a, [b], d] = [1, [2, 3], 4];   //a=1.b=2, d=4

數(shù)組的解構(gòu)賦值可以具有默認(rèn)值, 在 ES6中對(duì)于目標(biāo)數(shù)據(jù)使用嚴(yán)格相等(===)比較是否為空(undedined)。如果默認(rèn)值是表達(dá)式, 那么對(duì)于該表達(dá)式采用惰性求值, 即只有在對(duì)應(yīng)位置為空(undedined)時(shí)才執(zhí)行該表達(dá)式。

var [a=1, b] = [];   //a=1, b=undefined
var [a=1, b] = [2, 3];  //a=2, b=3
var [a=1, b] = [undefined, 3];   //a=1.b=3
var [a=1, b] = [null, 3];  //a=null, b=3
var [a=1, b] = [NaN, 3];  //a=NaN, b=3

function f(){
  console.log("done");
  return 2;
}
var [a=f()] = [1];    //a=1
var [a=f()] = [];    //a=2, 輸出 "done"

解構(gòu)賦值的右側(cè)表達(dá)式在必要的隱式轉(zhuǎn)換后如果不具有 iterator 則遍歷失敗, 關(guān)于 iterator, 具體看iterator部分。這里可以先記住, 左邊是數(shù)組結(jié)構(gòu)的解構(gòu)賦值, 右側(cè)可以是數(shù)組, 字符串, 集合, Generator 函數(shù), map等。

//字符串
var [a, b, c, d] = "123";   //a="1", b="2", c="3", d=undefined

//集合
var [a, b, c] = new Set(["1", "2", "3"]);  //a="1", b="2", c="3"

//Generator
function* fib(){
  let a = 1;
  let b = 1;
  while(1){
    yield a;
    [a, b] = [b, a + b];      //使用結(jié)構(gòu)賦值實(shí)現(xiàn)疊加并交換變量
  }
}
var [a, b, c, d, e, f] = fib();  //a=1, b=1, c=2, d=3, e=5, f=8

//map
var map = new Map();
map.set("a", 1);
map.set("b", 2);
var [a, b] = map;  //a=["a", 1], b=["b", 2]
對(duì)象的解構(gòu)賦值

對(duì)象的解構(gòu)賦值與變量位置次序無(wú)關(guān), 只取決于鍵名是否嚴(yán)格相等(===)。如果匹配失敗, 結(jié)果就是 undefined

var {a, b, f} = {b:2, a:3, d:4};  //a=3, b=2, f=undefined
var node = {
  loc: {
    start:{
      x:1,
      y:2
    }
  }
};
var {loc: {start: {x:line}}} = node;  //line=1

可以在復(fù)制時(shí)對(duì)屬性重命名, 但此時(shí)原名只用于匹配參數(shù), 不生成變量:

var {name:alias} = {name:"Bob"};  //alias="Bob"
console.log(name);   //"global"
console.log(alias);   //"Bob"

對(duì)象解構(gòu)同樣可以指定默認(rèn)值, 默認(rèn)值生效(或表達(dá)式被行)的條件是對(duì)應(yīng)屬性值嚴(yán)格等于(===) undefined

var {a:3, b} = {b:2}; //a=3, b=2
var {a:3, b} = {a:null, b:2}; //a=null, b=2

解構(gòu)嵌套對(duì)象父屬性不存在會(huì)報(bào)錯(cuò):

var {foo:{bar}} = {ba: 2};   //報(bào)錯(cuò)

解構(gòu)對(duì)象如果和聲明分開(kāi), 獨(dú)立成為一行要加圓括號(hào), 就想用 eval 解析 JSON 字符串的時(shí)候一樣。因?yàn)橄到y(tǒng)會(huì)把一行開(kāi)頭花括號(hào)默認(rèn)作為塊級(jí)作用域的開(kāi)始, 而不是對(duì)象的開(kāi)始。

var a, b;
({a, b} = {a:2, b:10});   //a=2, b=10
{a, b} = {a:2, b:10};   //報(bào)錯(cuò)

//以下表達(dá)式無(wú)意義, 但沒(méi)有錯(cuò)
({}=[1, 2]);
({}="abc");
({}=[]);

注意, 除了這樣的情況, 不要濫用圓括號(hào)

右側(cè)變量通過(guò)隱式類型轉(zhuǎn)換可以轉(zhuǎn)為對(duì)象的情況下也可以結(jié)構(gòu)賦值:

var {toString: s} = 123;  //s=Number.prototype.toString

技巧: 解構(gòu)的用處很多, 包括交換變量, 簡(jiǎn)化傳參(可帶默認(rèn)值),

//參數(shù)傳遞
function f([x, y, z=4]){
  return [x+1, y+2, z+3];
}
var [a, b, c] = f([1, 2]);  //a=2, b=4, c=7
[[1, 2], [3, 4]].map(([a, b]) => a + b);   //返回 [3, 7]
//交換變量
var a=2, b=4;
[a, b] = [b, a];  //a=4, b=2

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/97425.html

相關(guān)文章

  • ECMAScript6 新特性——“變量的解構(gòu)賦值

    摘要:數(shù)組的解構(gòu)賦值允許按照一定模式,從數(shù)組和對(duì)象中提取值,對(duì)變量進(jìn)行賦值,這被稱為解構(gòu)。如果變量名與屬性名不一致,必須寫成下面這樣。 1 數(shù)組的解構(gòu)賦值 ES6允許按照一定模式,從數(shù)組和對(duì)象中提取值,對(duì)變量進(jìn)行賦值,這被稱為解構(gòu)(Destructuring)。 基本用法 { var [a,[b,c],d,,...f] = [1,[2,3],4,5,6,7]; console...

    Eric 評(píng)論0 收藏0
  • 常用ECMAScript6語(yǔ)法歸納

    摘要:對(duì)象的解構(gòu)賦值函數(shù)執(zhí)行后,返回的是一個(gè)對(duì)象。分別取出對(duì)象中屬性為和的值,根據(jù)解構(gòu)賦值的規(guī)則,在左側(cè)聲明變量,放在大括號(hào)中,變量名要和屬性名保持一致。箭頭函數(shù)在中,箭頭函數(shù)就是函數(shù)的一種簡(jiǎn)寫形式允許使用箭頭定義函數(shù)。 原文博客地址,歡迎學(xué)習(xí)交流:點(diǎn)擊預(yù)覽 聲明變量 可以使用let、const關(guān)鍵字聲明變量,而不推薦使用var聲明變量 var聲明變量的問(wèn)題: 可以多次重復(fù)聲明同一個(gè)變量...

    raledong 評(píng)論0 收藏0
  • ECMAScript6標(biāo)準(zhǔn)入門(一)新增變量與數(shù)據(jù)結(jié)構(gòu)

    摘要:一簡(jiǎn)介與的關(guān)系是的規(guī)格,是的一種實(shí)現(xiàn)另外的方言還有和轉(zhuǎn)碼器命令行環(huán)境安裝直接運(yùn)行代碼命令將轉(zhuǎn)換成命令瀏覽器環(huán)境加入,代碼用環(huán)境安裝,,根目錄建立文件加載為的一個(gè)鉤子設(shè)置完文件后,在應(yīng)用入口加入若有使用,等全局對(duì)象及上方法安裝 一、ECMAScript6 簡(jiǎn)介 (1) 與JavaScript的關(guān)系 ES是JS的規(guī)格,JS是ES的一種實(shí)現(xiàn)(另外的ECMAScript方言還有Jscript和...

    Tangpj 評(píng)論0 收藏0
  • ECMAScript6(5):函數(shù)的擴(kuò)展

    摘要:否則調(diào)用時(shí)依然需要傳參報(bào)錯(cuò)注意這里不能用觸發(fā)默認(rèn)值這里我們還需要單獨(dú)討論一下默認(rèn)參數(shù)對(duì)的影響很明顯,默認(rèn)參數(shù)并不能加到中。關(guān)于作用域集中在函數(shù)擴(kuò)展的最后討論。那如果函數(shù)的默認(rèn)參數(shù)是函數(shù)呢?zé)X的要來(lái)了如果基礎(chǔ)好那就根本談不上不燒腦。 參數(shù)默認(rèn)值 ES5中設(shè)置默認(rèn)值非常不方便, 我們這樣寫: function fun(a){ a = a || 2; console.log(a); ...

    afishhhhh 評(píng)論0 收藏0
  • JavaScript中的解構(gòu)賦值

    摘要:是這樣描述解構(gòu)賦值的解構(gòu)賦值語(yǔ)法是一種表達(dá)式用來(lái)將數(shù)組中的值或?qū)ο笾械膶傩匀〕鰜?lái)區(qū)分為不同變量。現(xiàn)在讓我們將坐標(biāo)點(diǎn)放進(jìn)一個(gè)數(shù)組中現(xiàn)在要對(duì)這些點(diǎn)進(jìn)行處理,傳統(tǒng)可以想到的方法是這樣的借助解構(gòu)賦值,能變得這樣簡(jiǎn)潔使用箭頭函數(shù)更簡(jiǎn)潔 JavaScript是一種很有趣的語(yǔ)言,我個(gè)人很喜歡它,雖然仍還有些人不大喜歡它。在ECMAScript6(ES6)中,有許多有用的特性來(lái)使JavaScript開(kāi)...

    Panda 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

tinylcy

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<