成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

深入理解ES6筆記(五)解構(gòu):使訪(fǎng)問(wèn)數(shù)據(jù)更便捷

_DangJin / 3541人閱讀

摘要:當(dāng)冒號(hào)右側(cè)存在花括號(hào)時(shí),表示目標(biāo)被嵌套在對(duì)象的更深一層中。在對(duì)象的嵌套解構(gòu)中同樣能為本地變量使用不同的名稱(chēng)提取數(shù)組解構(gòu)結(jié)構(gòu)賦值基本忽略一些選項(xiàng)重新賦值默認(rèn)值數(shù)組解構(gòu)賦值同樣允許在數(shù)組任意位置指定默認(rèn)值。

主要知識(shí)點(diǎn):對(duì)象解構(gòu)、數(shù)組解構(gòu)、混合解構(gòu)以及參數(shù)解構(gòu)

《深入理解ES6》筆記 目錄

對(duì)象解構(gòu) 對(duì)象解構(gòu)

對(duì)象解構(gòu)簡(jiǎn)單的例子

let node = {
    type: "Identifier",
    name: "foo"
};
let { type, name } = node;
console.log(type); // "Identifier"
console.log(name); // "foo"
解構(gòu)賦值
let node = {
    type: "Identifier",
    name: "foo"
},
type = "Literal",
name = 5;
//使用解構(gòu)來(lái)分配不同的值
({ type, name } = node);
console.log(type); // "Identifier"
console.log(name); // "foo"

在函數(shù)中使用解構(gòu)賦值

let node = {
    type: "Identifier",
    name: "foo"
},
type = "Literal",
name = 5;
function outputInfo(value) {
    console.log(value === node); // true
}
outputInfo({ type, name } = node);
console.log(type); // "Identifier"
console.log(name); // "foo"
默認(rèn)值

當(dāng)你使用解構(gòu)賦值語(yǔ)句時(shí),如果所指定的本地變量在對(duì)象中沒(méi)有找到同名屬性,那么該變量會(huì)被賦值為 undefined 。

let node = {
    type: "Identifier",
    name: "foo"
};
let { type, name, value } = node;
console.log(type); // "Identifier"
console.log(name); // "foo"
console.log(value); // undefined

可以選擇性地定義一個(gè)默認(rèn)值,以便在指定屬性不存在時(shí)使用該值:

let node = {
    type: "Identifier",
    name: "foo"
};
let { type, name, value = true } = node;
console.log(type); // "Identifier"
console.log(name); // "foo"
console.log(value); // true
賦值給不同的本地變量名
let node = {
    type: "Identifier",
    name: "foo"
};
//讀取名為  type  的屬性,并把它的值存儲(chǔ)在變量  localType  上
let { type: localType, name: localName } = node;
console.log(localType); // "Identifier"
console.log(localName); // "foo"

也可以給變量別名添加默認(rèn)值,依然是在本地變量名稱(chēng)后添加等號(hào)與默認(rèn)值,例如:

let node = {
    type: "Identifier"
};
//該語(yǔ)法實(shí)際上與傳統(tǒng)對(duì)象字面量語(yǔ)法相反,傳統(tǒng)語(yǔ)法將名稱(chēng)放在冒號(hào)左邊、值放在冒號(hào)右邊;而在本例中,則是名稱(chēng)在右邊,需要進(jìn)行值讀取的位置則被放在了左邊。
let { type: localType, name: localName = "bar" } = node;
console.log(localType); // "Identifier"
console.log(localName); // "bar"
嵌套的對(duì)象解構(gòu)

使用類(lèi)似于對(duì)象字面量的語(yǔ)法,可以深入到嵌套的對(duì)象結(jié)構(gòu)中去提取你想要的數(shù)據(jù):

let node = {
    type: "Identifier",
    name: "foo",
    loc: {
        start: {
            line: 1,
            column: 1
        },
        end: {
            line: 1,
            column: 4
        }
    }
};
//每當(dāng)有一個(gè)冒號(hào)在解構(gòu)模式中出現(xiàn),就意味著冒號(hào)之前的標(biāo)識(shí)符代表需要檢查的位置,而冒號(hào)右側(cè)則是賦值的目標(biāo)。當(dāng)冒號(hào)右側(cè)存在花括號(hào)時(shí),表示目標(biāo)被嵌套在對(duì)象的更深一層中。
let { loc: { start }} = node;
console.log(start.line); // 1
console.log(start.column); // 1

在對(duì)象的嵌套解構(gòu)中同樣能為本地變量使用不同的名稱(chēng):

let node = {
    type: "Identifier",
    name: "foo",
    loc: {
        start: {
            line: 1,
            column: 1
        },
        end: {
            line: 1,
                column: 4
       }
    }
};
// 提取 node.loc.start
let { loc: { start: localStart }} = node;
console.log(localStart.line); // 1
console.log(localStart.column); // 1
數(shù)組解構(gòu) 結(jié)構(gòu)賦值

基本

let colors = [ "red", "green", "blue" ];
let [ firstColor, secondColor ] = colors;
console.log(firstColor); // "red"
console.log(secondColor); // "green"

忽略一些選項(xiàng)

let colors = [ "red", "green", "blue" ];
let [ , , thirdColor ] = colors;
console.log(thirdColor); // "blue"

重新賦值

let colors = [ "red", "green", "blue" ],
firstColor = "black",
secondColor = "purple";
[ firstColor, secondColor ] = colors;
console.log(firstColor); // "red"
console.log(secondColor); // "green"
默認(rèn)值

數(shù)組解構(gòu)賦值同樣允許在數(shù)組任意位置指定默認(rèn)值。當(dāng)指定位置的項(xiàng)不存在、或其值為undefined ,那么該默認(rèn)值就會(huì)被使用:

let colors = [ "red" ];
let [ firstColor, secondColor = "green" ] = colors;
console.log(firstColor); // "red"
console.log(secondColor); // "green"
嵌套的解構(gòu)

在整個(gè)解構(gòu)模式中插入另一個(gè)數(shù)組模式,解構(gòu)操作就會(huì)下行到嵌套的數(shù)組中,就像這樣:

let colors = [ "red", [ "green", "lightgreen" ], "blue" ];
// 隨后
let [ firstColor, [ secondColor ] ] = colors;
console.log(firstColor); // "red"
console.log(secondColor); // "green"
剩余項(xiàng)

數(shù)組解構(gòu)有個(gè)名為剩余項(xiàng)( rest items )的概念,它使用 ... 語(yǔ)法來(lái)將剩余的項(xiàng)目賦值給一個(gè)指定的變量:
三個(gè)點(diǎn)的解構(gòu)賦值必須放在所有解構(gòu)元素的最末尾,否則報(bào)錯(cuò)。

let colors = [ "red", "green", "blue" ];
let [ firstColor, ...restColors ] = colors;
console.log(firstColor); // "red"
console.log(restColors.length); // 2
console.log(restColors[0]); // "green"
console.log(restColors[1]); // "blue"

也可以進(jìn)行數(shù)組的克隆操作:

/ 在 ES5 中克隆數(shù)組
var colors = [ "red", "green", "blue" ];
var clonedColors = colors.concat();
console.log(clonedColors); //"[red,green,blue]"

// 在 ES6 中克隆數(shù)組
let colors = [ "red", "green", "blue" ];
let [ ...clonedColors ] = colors;
console.log(clonedColors); //"[red,green,blue]"
混合解構(gòu)

混合解構(gòu)指的是對(duì)象和數(shù)組混合起來(lái),執(zhí)行解構(gòu)操作

let node = {
    type: "Identifier",
    name: "foo",
    loc: {
        start: {
            line: 1,
            column: 1
        },
        end: {
            line: 1,
            column: 4
        }
    },
    range: [0, 3]
};
let {
loc: { start },
range: [ startIndex ]
} = node;
console.log(start.line); // 1
console.log(start.column); // 1
console.log(startIndex); // 0
參數(shù)解構(gòu)

原函數(shù)寫(xiě)法:

// options 上的屬性表示附加參數(shù)
function setCookie(name, value, options) {
    options = options || {};
    let secure = options.secure,
    path = options.path,
    domain = options.domain,
    expires = options.expires;
// 設(shè)置 cookie 的代碼
}
// 第三個(gè)參數(shù)映射到 options
setCookie("type", "js", {
    secure: true,
    expires: 60000
});

問(wèn)題:無(wú)法僅通過(guò)查看函數(shù)定義就判斷出函數(shù)所期望的輸入,必須閱讀函數(shù)體的代碼。

重寫(xiě)函數(shù):

function setCookie(name, value, { secure, path, domain, expires }) {
// 設(shè)置 cookie 的代碼
}
setCookie("type", "js", {
    secure: true,
    expires: 60000
});
解構(gòu)的參數(shù)是必需的

參數(shù)解構(gòu)有一個(gè)怪異點(diǎn):默認(rèn)情況下調(diào)用函數(shù)時(shí)未給參數(shù)解構(gòu)傳值會(huì)拋出錯(cuò)誤:

// 出錯(cuò)!
setCookie("type", "js");

可以這樣寫(xiě)避免錯(cuò)誤:

function setCookie(name, value, { secure, path, domain, expires } = {}) {
// ...
}
參數(shù)解構(gòu)的默認(rèn)值
function setCookie(name, value,
{
    secure = false,
    path = "/",
    domain = "example.com",
    expires = new Date(Date.now() + 360000000)
} = {}
) {
// ...
}

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/108477.html

相關(guān)文章

  • 深入理解ES6筆記——解構(gòu)使數(shù)據(jù)訪(fǎng)問(wèn)便捷(5)

    摘要:解構(gòu),一種黑魔法解構(gòu)是從對(duì)象中提取出更小元素的過(guò)程。賦值是對(duì)解構(gòu)出來(lái)的元素進(jìn)行重新賦值??偨Y(jié)本章講解了對(duì)象解構(gòu)賦值和數(shù)組解構(gòu)賦值,以及對(duì)象和數(shù)組混合情況下的解構(gòu)賦值操作,最后一個(gè)知識(shí)點(diǎn)是解構(gòu)函數(shù)的參數(shù)。 解構(gòu),一種黑魔法 解構(gòu)是從對(duì)象中提取出更小元素的過(guò)程。賦值是對(duì)解構(gòu)出來(lái)的元素進(jìn)行重新賦值。 下面的代碼你可能無(wú)法在瀏覽器上實(shí)時(shí)測(cè)試,推薦在babel官網(wǎng)在線(xiàn)測(cè)試代碼:在線(xiàn)測(cè)試ES6代碼...

    Drinkey 評(píng)論0 收藏0
  • 深入理解ES6筆記——導(dǎo)讀

    摘要:最近買(mǎi)了深入理解的書(shū)籍來(lái)看,為什么學(xué)習(xí)這么久還要買(mǎi)這本書(shū)呢主要是看到核心團(tuán)隊(duì)成員及的創(chuàng)造者為本書(shū)做了序,作為一個(gè)粉絲,還是挺看好這本書(shū)能給我?guī)?lái)一個(gè)新的升華,而且本書(shū)的作者也非常厲害。 使用ES6開(kāi)發(fā)已經(jīng)有1年多了,以前看的是阮一峰老師的ES6教程,也看過(guò)MDN文檔的ES6語(yǔ)法介紹。 最近買(mǎi)了《深入理解ES6》的書(shū)籍來(lái)看,為什么學(xué)習(xí)ES6這么久還要買(mǎi)這本書(shū)呢?主要是看到Daniel A...

    Godtoy 評(píng)論0 收藏0
  • ES6學(xué)習(xí)之 -- 解構(gòu)使數(shù)據(jù)訪(fǎng)問(wèn)便捷

    摘要:數(shù)組的解構(gòu)賦值規(guī)定允許按照一定模式,從數(shù)組和對(duì)象中提取值對(duì)變量進(jìn)行賦值,我們稱(chēng)之為解構(gòu)。的規(guī)則是,只要有可能導(dǎo)致解構(gòu)的歧義,就不得使用圓括號(hào)。 數(shù)組的解構(gòu)賦值 ES6規(guī)定:允許按照一定模式,從數(shù)組和對(duì)象中提取值對(duì)變量進(jìn)行賦值,我們稱(chēng)之為解構(gòu)。以前賦值只能直接指定值 let a = 1; let b = 2; let c = 3; ES6允許以下這種做法 let [a, b, c] = ...

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

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

0條評(píng)論

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