深入理解ES6之—數據解構

来源:https://www.cnblogs.com/xzsty/archive/2018/01/12/8277695.html
-Advertisement-
Play Games

一 對象解構 對象解構語法在賦值語句的左側使用了對象字面量 type與name標識符既聲明瞭本地變數,也讀取了對象的相應屬性值。 解構賦值表達式的值為表達式右側的值。當解構表達式的右側的計算結果為null或者undefined時,會拋出錯誤。 預設值 當你使用解構賦值語句時,如果所指定的本地變數在對 ...


一 對象解構

對象解構語法在賦值語句的左側使用了對象字面量

let node = {
    type: true,
    name: false
}

//既聲明又賦值
let {
    type,
    name
} = node;

//或者先聲明再賦值
let type, name
({type,name} = node);
console.log(type);//true
console.log(name);//false

type與name標識符既聲明瞭本地變數,也讀取了對象的相應屬性值。

解構賦值表達式的值為表達式右側的值。當解構表達式的右側的計算結果為null或者undefined時,會拋出錯誤。

預設值

當你使用解構賦值語句時,如果所指定的本地變數在對象中沒有找到同名屬性,那麼該變數會被賦值為undefined

let node = {
    type: true,
    name: false
},
    type, name, value;
({type,value,name} = node);

console.log(type);//true
console.log(name);//false
console.log(value);//undefined

你可以選擇性地定義一個預設值,以便在指定屬性不存在時使用該值。

let node = {
        type: true,
        name: false
    },
    type, name, value;
({
    type,
    value = true,
    name
} = node);

console.log(type);//true
console.log(name);//false
console.log(value);//true

賦值給不同的本地變數名

let node = {
    type: true,
    name: false,
    value: "dd"
}
let {
    type: localType,
    name: localName,
    value: localValue = "cc"
} = node;
console.log(localType);
console.log(localName);
console.log(localValue);

type:localType這種語法表示要讀取名為type的屬性,並把它的值存儲在變數localType上。該語法與傳統對象字面量的語法相反

嵌套的對象結構

let node = {
type: "Identifier",
name: "foo",
loc: {
    start: {
        line: 1,
        column: 1
    },
    end: {
        line: 1,
        column: 4
    }
}
}

let {
loc: localL,
loc: {
    start: localS,
    end: localE
}
} = node;

console.log(localL);// start: {line: 1,column: 1},end: {line: 1,column: 4}
console.log(localS);//{line: 1,column: 1}
console.log(localE);//{line: 1,column: 4}

當冒號右側存在花括弧時,表示目標被嵌套在對象的更深一層中(loc: {start: localS,end: localE})

二 數據解構

數組解構的語法看起來跟對象解構非常相似,只是將對象字面量換成了數組字面量。

let colors = ["red", "blue", "green"];
let [firstC, secondC, thirdC, thursC = "yellow"] = colors;
console.log(firstC//red
console.log(secondC);//blue
console.log(thirdC);//green
console.log(thursC);//yellow

你也可以在解構模式中忽略一些項,並只給感興趣的項提供變數名。

let colors = ["red","green","blue"];

let [,,thirdC] = colors;
console.log(thirdC);//blue

thirdC之前的逗號是為數組前面的項提供的占位符。使用這種方法,你就可以輕易從數組任意位置取出值,而無需給其他項提供名稱。

解構賦值

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

數組解構有一個非常獨特的用例,能輕易的互換兩個變數的值。

let a =1,b =2;
[a,b] = [b,a];
console.log(a);//2
console.log(b);//1

嵌套的解構

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

剩餘項

let colors = ["red", "green", "blue"];
let [firstC, ...restC] = colors;
console.log(firstC);
console.log(...restC);
console.log(restC[0]);//green
console.log(restC[1]);//blue

使用剩餘項可以進行數組克隆

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

三 混合解構

let node = {
type: "Identifier",
name: 'foo',
loc: {
    start: {
        line: 1,
        column: 1
    },
    end: {
        line: 1,
        column: 4
    }
},
range: [0, 3]
}

let {
type,
name: localName,
loc: {
    start: {
        line: ll
    },
    end: {
        column: col
    }
},
range: [, second]
} = node;

console.log(type);//Identifier
console.log(localName);//foo
console.log(ll);//1
console.log(col);//4
console.log(second);//3

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • iOS 10 以後記得在plist裡面添加獲取拍照和相冊許可權,iOS 10 以後記得在plist裡面添加獲取拍照和相冊許可權,iOS 10 以後記得在plist裡面添加獲取拍照和相冊許可權,iOS 10 以後記得在plist裡面添加獲取拍照和相冊許可權,iOS 10 以後記得在plist裡面添加獲取拍照和 ...
  • 使用android studio開發程式時,有時會出現 waiting for debugger 卡住界面,軟體無法正常debug運行的情況,很多網友分享了一些解決辦法,比如: 1 打開cmd進入命令行,進入adb所在目錄先後執行adb kill-server,adb start-server。 2 ...
  • 由於業務需要,需要將開發的App從一個賬號(A賬號)轉移到另一個賬號(B賬號),這裡簡單介紹一下轉讓流程 ...
  • 1.先構建WrapRecyclerAdapter 2.構建WrapRecyclerView 我們最好還是模仿ListView的結構搞就搞到西,自定義一個WrapRecyclerView,可以添加刪除頭部和底部View,這個就比較簡單 3.使用: ...
  • 測試的時候找個自己封裝的方法或UI控制項就可以了 這裡用我剛封裝的Redirect重定向的請求體為例 1, 在github上創建一個Redirect,重要:記得選擇開源協議 (MIT)(如果木有GitHub那先百度一下) 2, 使用 Github Desktop Clone (克隆) Redirect ...
  • 1、JavaScript概念 JavaScript是腳本語言; 編寫之後,可以直接運行(缺失了編譯的過程) 2、JavaScript發展 LiveScript => JavaScript => Jscript => ECMAScript(腳本語言的標準) || || || || 95年網景公司; 網 ...
  • 我有罪。。。昨天遺留的資料庫的問題還沒有解決,而且今天也沒寫js代碼…… 這兩天主要在看DOM的視頻,其實DOM的用法大概懂一點,但是一直沒有系統完整的去學。。。 還是對著文檔來寫吧,就這樣聽老師講了一遍其實印象並不是很深刻。 children 返回的是數組,所以子元素存放的數組 parentNod ...
  • 本文最初發表於 "博客園" ,併在 "GitHub" 上持續更新 前端的系列文章 。歡迎在GitHub上關註我,一起入門和進階前端。 以下是正文。 background系列屬性 常見背景屬性 CSS樣式中,常見的背景屬性有以下幾種:(經常用到,要記住) 設置元素的背景顏色。 將圖像設置為背景。 設置 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...