ES6 對象的解構賦值

来源:https://www.cnblogs.com/chenyingying0/archive/2020/03/24/12562648.html
-Advertisement-
Play Games

對象是無序的,必須使用屬性名去匹配 因此解構賦值時變數名必須與對象的屬性名保持一致 const obj={ a:1, b:2 }; let {a,b}=obj; 比較複雜的結構條件: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...


對象是無序的,必須使用屬性名去匹配

因此解構賦值時變數名必須與對象的屬性名保持一致

const obj={
    a:1,
    b:2
};
let {a,b}=obj;

 

 

 

比較複雜的結構條件:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>demo</title>
</head>
<body>
<script>

const person={
    name:"cyy",
    age:10,
    friends:[{
        name:"cyy2",
        age:20
    },{
        name:"cyy3",
        age:30
    },{
        name:"cyy4",
        age:40
    }]
};

const {name}=person;//name   "cyy"
const {age}=person;//age   10

//只能取到friend1,不能取到friends
const {friends:[friend1]}=person;//friend1   {name: "cyy2", age: 20}
const {friends:[,friend2]}=person;//friend2   {name: "cyy3", age: 30}
const {friends:[,,friend3]}=person;//friend3   {name: "cyy4", age: 40}

const {friends:[{name}]}=person;//name   "cyy2"
const {friends:[,{age}]}=person;//age   30
const {friends:[{name},{name},{name}]}=person;
</script>
</body>
</html>

如果出現對象屬性名重覆的情況,會報錯

 

 

 

解決方法是使用: 來定義別名

const {friends:[{name:fname1},{name:fname2},{name:fname3}]}=person;// "cyy2"  

 

 

 

對象的解構賦值結合擴展運算符:

const obj={
    name:"cyy",
    age:18,
    id:1
}

const {name,...oth}=obj;

 

 

 

使用擴展運算符合併對象:

const obj1={
    name1:"cyy1",
    age1:18
}
const obj2={
    name2:"cyy2",
    age2:28
}
const obj3={
    name3:"cyy3",
    age3:38
}
const obj={
    name:"cyy",
    ...obj1,
    ...obj2,
    ...obj3
}

 

 

 

如何對已經聲明的變數進行對象的解構賦值:

let person;//聲明變數
const p={
    name:"cyy",
    age:18
}
{person}=p;

這種情況下會報錯,因為把{person}看成了一個塊級作用域

 

 

解決方法是外面用圓括弧包裹

let person;//聲明變數
const p={
    name:"cyy",
    age:18
};

({person}=p);

居然沒有獲取到數據,尷尬……

 

 

總而言之不建議先聲明再結構賦值哈,最好是聲明的同時進行解構賦值

 

預設值:

當屬性值不存在或者為undefined時,會使用預設值

const person={
    name:"cyy",
    age:18
};

let {name,age=20,hobby=["html","css"]}=person;

 

 

對象的解構賦值常用場景:

提取對象屬性

const {name,hobby:[hobby1]}={
    name:"cyy",
    age:18,
    hobby:[
        "html",
        "css"
    ]
}

 

 

需要註意的是,這樣是拿不到hobby的值,如果需要獲取hobby,則需要單獨再加

const {name,hobby:[hobby1],hobby}={
    name:"cyy",
    age:18,
    hobby:[
        "html",
        "css"
    ]
}

 

 

使用對象傳入亂序的函數參數:

function Ajax({
    url,
    data,
    type="get"
}){
    console.log(type);
}

Ajax({
    //可以亂序
    url:"getxxx",
    data:{
        a:1
    }
})

 

 

獲取多個 函數返回值

function getInfo(uid){
    //...
    
    return {
        status:"success",
        data:{
            a:1
        },
        info:"hello"
    }
}

const {status,data,info}=getInfo(333);

 


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

-Advertisement-
Play Games
更多相關文章
  • 今天上課要用管理員系統驗證登錄 Oracle,提示我許可權不足,上網搜了下,問題應該是當前用戶未在 ora_dba 組下,得勒,把它添加進去不就行了 找了半天,坑爹地發現 win10 家庭版它就沒有 本地用戶和組 的圖形界面,這氣人玩意兒,再去找管理本地用戶和組的 Dos 命令,把本此添加過程記錄下 ...
  • 目錄 "臟讀(Dirty reads)" "不可重覆讀(Non repeatable reads)" "幻影讀(Phantom reads)" "可重覆讀級別下防止幻讀" "可串列化級別杜絕幻讀" "總結" MySQL8中隔離級別的變數跟之前的版本不一樣,之前是tx_isolation,MySQL8 ...
  • 先上效果圖,預設的實在是太醜了,搜查 Share Extension 自定義界面相關文章大部分都會引導你用 NSExtensionPrincipalClass ,然後繼承 UIViewController ,然後全都是手寫代碼,但是我想用 Storyboard 啊!其實很簡單: 不用改 NSExte ...
  • 自定義marker與infoWindow窗體 1.展示地圖佈局的xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" an ...
  • 2020年本應該是一個 "愛你、愛你"的年份!卻因為 黑天鵝 給我們帶來非常大的影響! 一、2020年iOS招聘數據分析 這裡是 2020年3月份BOSS直聘 北京iOS招聘前幾頁數據 薪資待遇崗位個數年限要求公司規模 15K左右 35份 1-3年 20-99 20K左右 78份 3-5年 100- ...
  • 效果 代碼 佈局樣式代碼省略,以下只展示邏輯代碼 我們想要的是居中的效果,所以觸發滾動的條件是點 寬度一半之後的項才開始滾動,所以需要減去寬度的一半 為相對於 總長度的X軸距離,只要相減計算後的數值為正數,就可以證明上面的條件,觸發滾動 ...
  • 大家好,這是第8期免費工具推薦,本次分享一個面前的去水印工具:《靈泉短視頻去水印》小程式,完全免費,支持抖音、快手、小紅書等幾十個平臺!一鍵保存無水印視頻到手機相冊!蘋果安卓手機通用!掃描下方微信小程式碼直達! ...
  • const str="hello world"; const [a,b,...oth]=str; 字元串分割為數組的三種方法: const str="hello world"; const [...str1]=str; const str2=[...str]; const str3=str.spli ...
一周排行
    -Advertisement-
    Play Games
  • 前言 在我們開發過程中基本上不可或缺的用到一些敏感機密數據,比如SQL伺服器的連接串或者是OAuth2的Secret等,這些敏感數據在代碼中是不太安全的,我們不應該在源代碼中存儲密碼和其他的敏感數據,一種推薦的方式是通過Asp.Net Core的機密管理器。 機密管理器 在 ASP.NET Core ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 順序棧的介面程式 目錄順序棧的介面程式頭文件創建順序棧入棧出棧利用棧將10進位轉16進位數驗證 頭文件 #include <stdio.h> #include <stdbool.h> #include <stdlib.h> 創建順序棧 // 指的是順序棧中的元素的數據類型,用戶可以根據需要進行修改 ...
  • 前言 整理這個官方翻譯的系列,原因是網上大部分的 tomcat 版本比較舊,此版本為 v11 最新的版本。 開源項目 從零手寫實現 tomcat minicat 別稱【嗅虎】心有猛虎,輕嗅薔薇。 系列文章 web server apache tomcat11-01-官方文檔入門介紹 web serv ...
  • C總結與剖析:關鍵字篇 -- <<C語言深度解剖>> 目錄C總結與剖析:關鍵字篇 -- <<C語言深度解剖>>程式的本質:二進位文件變數1.變數:記憶體上的某個位置開闢的空間2.變數的初始化3.為什麼要有變數4.局部變數與全局變數5.變數的大小由類型決定6.任何一個變數,記憶體賦值都是從低地址開始往高地 ...
  • 如果讓你來做一個有狀態流式應用的故障恢復,你會如何來做呢? 單機和多機會遇到什麼不同的問題? Flink Checkpoint 是做什麼用的?原理是什麼? ...
  • C++ 多級繼承 多級繼承是一種面向對象編程(OOP)特性,允許一個類從多個基類繼承屬性和方法。它使代碼更易於組織和維護,並促進代碼重用。 多級繼承的語法 在 C++ 中,使用 : 符號來指定繼承關係。多級繼承的語法如下: class DerivedClass : public BaseClass1 ...
  • 前言 什麼是SpringCloud? Spring Cloud 是一系列框架的有序集合,它利用 Spring Boot 的開發便利性簡化了分散式系統的開發,比如服務註冊、服務發現、網關、路由、鏈路追蹤等。Spring Cloud 並不是重覆造輪子,而是將市面上開發得比較好的模塊集成進去,進行封裝,從 ...
  • class_template 類模板和函數模板的定義和使用類似,我們已經進行了介紹。有時,有兩個或多個類,其功能是相同的,僅僅是數據類型不同。類模板用於實現類所需數據的類型參數化 template<class NameType, class AgeType> class Person { publi ...
  • 目錄system v IPC簡介共用記憶體需要用到的函數介面shmget函數--獲取對象IDshmat函數--獲得映射空間shmctl函數--釋放資源共用記憶體實現思路註意 system v IPC簡介 消息隊列、共用記憶體和信號量統稱為system v IPC(進程間通信機制),V是羅馬數字5,是UNI ...