ECMAScript6介紹及環境搭建

這實際上說明,對象的解構賦值是下面形式的簡寫。

let { foo: foo, bar: bar } = { foo: ‘aaa’, bar: ‘bbb’ };

也就是說,對象的解構賦值的內部機制,是先找到同名屬性,然后再賦給對應的變量。真正被賦值的是后者,而不是前者。

let { foo: baz } = { foo: ‘aaa’, bar: ‘bbb’ };

baz // “aaa”

foo // error: foo is not defined

上面代碼中,foo是匹配的模式,baz才是變量。真正被賦值的是變量baz,而不是模式foo。

(2)嵌套對象的解構賦值

與數組一樣,解構也可以用于嵌套結構的對象。

let obj = {

p: [

‘Hello’,

{ y: ‘World’ }

]

};

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

x // “Hello”

y // “World”

注意,這時p是模式,不是變量,因此不會被賦值。如果p也要作為變量賦值,可以寫成下面這樣。

let obj = {

p: [

‘Hello’,

{ y: ‘World’ }

]

};

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

x // “Hello”

y // “World”

p // [“Hello”, {y: “World”}]

下面是另一個例子。

4.5、解構賦值注意事項

(1)如果要將一個已經聲明的變量用于解構賦值,必須非常小心。

// 錯誤的寫法

let x;

{x} = {x: 1};

// SyntaxError: syntax error

上面代碼的寫法會報錯,因為 JavaScript 引擎會將{x}理解成一個代碼塊,從而發生語法錯誤。只有不將大括號寫在行首,避免 JavaScript 將其解釋為代碼塊,才能解決這個問題。

// 正確的寫法

let x;

({x} = {x: 1});

上面代碼將整個解構賦值語句,放在一個圓括號里面,就可以正確執行。關于圓括號與解構賦值的關系,參見下文。

(2)解構賦值允許等號左邊的模式之中,不放置任何變量名。因此,可以寫出非常古怪的賦值表達式。

({} = [true, false]);

({} = ‘abc’);

({} = []);

上面的表達式雖然毫無意義,但是語法是合法的,可以執行。

(3)由于數組本質是特殊的對象,因此可以對數組進行對象屬性的解構。

let arr = [1, 2, 3];

let {0 : first, [arr.length - 1] : last} = arr;

first // 1

last // 3

上面代碼對數組進行對象解構。數組arr的0鍵對應的值是1,[arr.length - 1]就是2鍵,對應的值是3。方括號這種寫法,屬于“屬性名表達式”。

4.6、解構賦值的用途

變量的解構賦值用途很多。

(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();

// 返回一個對象

function example() {

return {

foo: 1,

bar: 2

};

}

let { foo, bar } = example();

(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]

上面代碼可以快速提取 JSON 數據的值。

(5)函數參數的默認值

jQuery.ajax = function (url, {

async = true,

beforeSend = function () {},

cache = true,

complete = function () {},

crossDomain = false,

global = true,

// … more config

} = {}) {

// … do stuff

};

指定參數的默認值,就避免了在函數體內部再寫var foo = config.foo || ‘default foo’;這樣的語句。

(6)遍歷Map結構

任何部署了 Iterator 接口的對象,都可以用for…of循環遍歷。Map 結構原生支持 Iterator 接口,配合變量的解構賦值,獲取鍵名和鍵值就非常方便。

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”);

5、字符串、函數、數組、對象的擴展


5.1、模板字符串

傳統的 JavaScript 語言,輸出模板通常是這樣寫的(下面使用了 jQuery 的方法)。

$(‘#result’).append(

‘There are ’ + basket.count + ' ’ +

'items in your basket, ’ +

’ + basket.onSale +

‘ are on sale!’

);

上面這種寫法相當繁瑣不方便,ES6 引入了模板字符串解決這個問題。

$(‘#result’).append(`

There are ${basket.count} items

in your basket, ${basket.onSale}

are on sale!

`);

模板字符串(template string)是增強版的字符串,用反引號(`)標識。它可以當作普通字符串使用,也可以用來定義多行字符串,或者在字符串中嵌入變量。

// 普通字符串

In JavaScript '\n' is a line-feed.

// 多行字符串

`In JavaScript this is

not legal.`

console.log(`string text line 1

string text line 2`);

// 字符串中嵌入變量

let name = “Bob”, time = “today”;

Hello ${name}, how are you ${time}?

上面代碼中的模板字符串,都是用反引號表示。

轉義符號

如果在模板字符串中需要使用反引號,則前面要用反斜杠轉義。

let greeting = \Yo` World!`;

多行字符串

如果使用模板字符串表示多行字符串,所有的空格和縮進都會被保留在輸出之中。

$(‘#list’).html(`

    本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
    如若轉載,請注明出處:http://www.pswp.cn/diannao/36671.shtml
    繁體地址,請注明出處:http://hk.pswp.cn/diannao/36671.shtml
    英文地址,請注明出處:http://en.pswp.cn/diannao/36671.shtml

    如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

    相關文章

    數據結構_緒論

    1.數據結構的研究內容 研究數據的特性和數據之間的關系 用計算機解決一個問題的步驟 1.具體問題抽象成數學模型 實質: 分析問題--->提取操作對象--->找出操作對象之間的關系(數據結構)--->用數學語言描述 操作對象對象之間的關系 2.設計算法 3.編程,調試,運行 …

    GO語言面試題目,使用3個協程按照順序從1打印到100

    GO語言面試題目,使用3個協程按照順序從1打印到100 稍微把題目拓展了下,使用N個協程 打印M個數,應該很好理解,創建一個N個協程的列表,然后每打印一個數,就傳到下一個chan中,一次循環 package m…

    【數據結構與算法】哈希函數 詳解

    哈希函數的構造方法有哪些? 直接定址法:直接使用關鍵字或者關鍵字的某個線性函數值作為哈希地址。 數字分析法:對關鍵字進行分析,選擇關鍵字中的某幾位或者進行某種運算得到的結果作為哈希地址。 平方取中法:先計算關…

    通信協議總結

    IIC 基本特點 同步,半雙工 標準100KHz,最高400KHz(IIC主要應用于低速設備) 硬件組成 需外接上拉電阻 通信過程 空閑狀態 SDA和SCL都處于高電平 開始信號S和終止信號P 在數據傳輸過程中,當SCL0時,SDA才…

    十常侍亂政 | 第2集 | 愿領精兵五千,斬關入內,冊立新君,誅殺宦黨,掃清朝廷,以安天下 | 三國演義 | 逐鹿群雄

    🙋大家好!我是毛毛張! 🌈個人首頁: 神馬都會億點點的毛毛張 📌這篇博客是毛毛張分享三國演義文學劇本中的經典臺詞和語句,本篇分享的是《三國演義》第Ⅰ部分《群雄逐鹿》的第2??集《十常侍亂政治》&am…

    匯聚榮做拼多多運營第一步是什么?

    匯聚榮做拼多多運營第一步是什么?在眾多電商平臺中,拼多多憑借其獨特的社交電商模式迅速崛起,吸引了大量消費者和商家的目光。對于希望在拼多多上開店的商家而言,了解如何進行有效運營是成功的關鍵。那么,匯聚榮做拼多多運營的第…

    【Android面試八股文】Looper如何在子線程中創建?

    文章目錄 一、Looper的幾個重要方法二、子線程中使用Looper的方式1三、子線程中使用Looper的方式23.1 使用HandlerThread實現3.2 HandlerThread源碼解析創建子線程的 Looper必須要通過 Looper.prepare()初始化looper,然后再通過 Looper.loop()方法讓 Loop運行起來。 那么具…

    算法入門:二分查找及其Java實現

    在程序開發中,算法是解決問題的核心。本篇博客將詳細講解一種高效的查找算法——二分查找,并通過Java代碼示例幫助你理解其實現和應用。 如果你覺得這篇文章對你有幫助,不要忘記點贊、收藏和關注我,這將是對我最大的支持和鼓勵&am…

    VMware 最新的安全漏洞公告VMSA-2024-0013

    #深度好文計劃# 一、摘要 2024年6月26日,VMware 發布了最新的安全漏洞公告 VMSA-2024-0013,修復了 VMware ESXi 和 VMware vCenter 中的多個安全漏洞。 VMSA-2024-0013:VMware ESXi 和 vCenter Server 更新修正了多個安全性漏洞 &#xff…

    Unity3D 物體的運動

    運動方式1 修改 position / localPosition ,可以讓物體運動 例如, Vector3 pos this.transform.localPosition; pos.z distance; this.transform.localPosition pos; 此時,小車向Z 方向運動 具體代碼如下 using System.Collection…

    C語言入門課程學習筆記10:結構體聯合體位域

    C語言入門課程學習筆記10 第48課 - 自定義數據類型(上)實驗-typedef實驗小結 第49課 - 自定義數據類型(中)實驗實驗小結 第50課 - 自定義數據類型(下)實驗實驗小結 第51課 - 多文件程序設計實驗實驗實驗小結…

    uni-app picker多列選項

    預期實現的效果&#xff1a; 選中后的效果&#xff1a; // Dom部分 <template><picker mode"multiSelector" :range"ssqRange" range-key"name" columnchange"ssqColumnChange" change"ssqChange" class"p…

    研究發現GPT-4o等較新的多模態AI模型的安全機制有不足之處

    在 ChatGPT 和類似的生成式人工智能模型推出后&#xff0c;很多人都在強調安全問題&#xff0c;政府也參與其中&#xff0c;OpenAI 甚至成立了一個超級協調小組&#xff0c;以阻止未來的人工智能失控&#xff0c;但由于對人工智能安全的發展方向存在分歧&#xff0c;該小組于今…

    03邏輯門電路

    分立門電路&#xff1a; 集成門電路&#xff1a; TTL門電路 MOS門電路&#xff1a;NMOS門電路、PMOS門電路、CMOS門電路 BICMOS門電路&#xff1a;CMOS的高輸入阻抗和TTL的高放大倍數的結合 向更低功耗、更高速度發展 MOS管的Rdson在可變電阻區的阻值也一般會小于1000歐姆 …

    達夢數據庫的系統視圖v$locked_object

    達夢數據庫的系統視圖v$locked_object 在達夢數據庫&#xff08;Dameng Database&#xff09;中&#xff0c;V$LOCKED_OBJECT 視圖提供了與數據庫中被鎖定對象相關的信息。這通常用于監控和診斷數據庫中的鎖定問題&#xff0c;幫助管理員了解哪些對象被鎖定了&#xff0c;以及…

    1.回溯算法.基礎

    1.回溯算法 基礎知識題目1.組合2.組合-優化3.組合總和|||4.電話號碼和字母組合5.組合總和6.組合總和II7.分割回文串8.復原IP地址 基礎知識 回溯法也可以叫做回溯搜索法&#xff0c;它是一種搜索的方式。回溯是遞歸的副產品&#xff0c;只要有遞歸就會有回溯 因為回溯的本質是窮…

    Excel 宏錄制與VBA編程 —— 11、工作表及工作簿操作(附:Worksheets與Sheets區別)

    代碼1 - Worksheets與Sheets區別 Worksheets表示普通工作表;Sheets即可表示普通工作表也可表示圖標工作表。 下面模塊中代碼結果是一樣的,大家理解時可結合上面區別說明進行了解 Sub Test()Worksheets("Sheet1").Range("A1").Value 100Sheets("Sheet…

    BioCLIP:物種圖像的基礎視覺模型

    從無人機到個人手機&#xff0c;各種相機收集的自然世界圖像是越來越豐富的生物信息來源。從圖像中提取生物相關信息用于科學的計算方法和工具激增&#xff0c;尤其是計算機視覺。然而&#xff0c;其中大多數都是為特定任務設計的&#xff0c;不容易適應或擴展到新的問題、環境…

    【編程知識】什么是編譯型語言?什么是解釋型語言?

    1.編譯型語言&#xff1a; 源代碼由編譯器編譯為機器代碼&#xff08;中間代碼&#xff09;&#xff0c;生成可執行文件&#xff0c;后面的執行無需編譯&#xff0c;可以直接運行&#xff0c;無需依賴源代碼或編譯器。 執行速度更快&#xff0c;因為在執行前已經有一步編譯階段…

    運維團隊如何加強安全設備監控與日志管理

    隨著信息技術的飛速發展&#xff0c;網絡安全問題日益凸顯&#xff0c;安全設備的監控和日志管理成為了運維團隊不可或缺的工作內容。本文將結合運維行業的實際需求&#xff0c;探討如何加強安全設備監控與日志管理&#xff0c;以提升系統的安全性和穩定性。 一、安全設備監控…