目錄
#概念
數組解構
宣告分別賦值
解構預設值
交換變數值
#解構函數傳回的陣列
忽略回傳值(或跳過某一項)
賦值數組剩餘值給一個變數
#嵌套數組解構
字串解構
物件解構
基礎物件解構
賦值給新變數名稱
賦值給新物件名稱的同時提供預設值
#同時使用陣列和物件解構
不完全解構
賦值剩餘值給一個物件
嵌套物件解構(可忽略解構)
注意事項
小心地使用已宣告變數進行解構
函數參數的解構賦值
從函數傳回多個值
提取JSON数据
首頁 web前端 js教程 帶你來了解JavaScript解構賦值

帶你來了解JavaScript解構賦值

Mar 17, 2022 pm 05:36 PM
javascript

本篇文章為大家帶來了關於javascript的相關知識,其中主要介紹了關於解構賦值的相關問題,包括了數組解構、對象結構以及解構的用途等等,希望對大家有幫助。

帶你來了解JavaScript解構賦值

相關推薦:javascript學習教學

#概念

ES6提供了更簡潔的賦值模式,從數組和物件中提取值,這被稱為解構

範例:

[a, b] = [50, 100];
console.log(a);
// expected output: 50
console.log(b);
// expected output: 100

[a, b, ...rest] = [10, 20, 30, 40, 50];
console.log(rest);
// expected output: [30, 40, 50]
登入後複製

數組解構

數組解構是非常簡單簡潔的,在賦值表達式的左側使用數組字面量,數組字面量中的每個變數名稱映射為解構數組的相同索引項

這是什麼意思呢,就是如下面這個示例一樣,左邊數組中的項分別得到了右側解構數組對應索引的值

let [a, b, c] = [1, 2, 3];
// a = 1
// b = 2
// c = 3
登入後複製

宣告分別賦值

你可以透過變數宣告分別解構賦值

範例:宣告變量,分別賦值

// 声明变量
let a, b;
// 然后分别赋值
[a, b] = [1, 2];
console.log(a); // 1
console.log(b); // 2
登入後複製

解構預設值

#如果解構取出的值是undefined,可以設定預設值:

let a, b;
// 设置默认值
[a = 5, b = 7] = [1];
console.log(a); // 1
console.log(b); // 7
登入後複製

在上面的範例中,我們給a和b都設定了預設值
這種情況下,如果a或b的值是undefined,它將把設定的預設值賦給對應變數(5賦給a,7賦給b)

交換變數值

以往我們進行兩個變數的交換,都是使用

//交换abc = a;a = b;b = c;
登入後複製

異或的方法

#然而在解構賦值中,我們可以在一個解構表達式中交換兩個變數值

let a = 1;let b = 3;//交换a和b的值[a, b] = [b, a];console.log(a); // 3console.log(b); // 1
登入後複製

#解構函數傳回的陣列

我們可以直接解構一個傳回值為陣列的函數

function c() {
  return [10, 20];}let a, b;[a, b] = c();console.log(a); // 10console.log(b); // 20
登入後複製

在上面的範例中,**c()**的傳回值[ 10,20]可以在單獨的同一行程式碼中使用解構

忽略回傳值(或跳過某一項)

你可以有選擇性的跳過一些不想得到的回傳值

function c() {
  return [1, 2, 3];}let [a, , b] = c();console.log(a); // 1console.log(b); // 3
登入後複製

賦值數組剩餘值給一個變數

當你使用數組解構時,你可以把賦值數組剩餘的部分全部賦給一個變數

let [a, ...b] = [1, 2, 3];console.log(a); // 1console.log(b); // [2, 3]
登入後複製

這樣的話b也會變成一個陣列了,陣列中的項目是剩餘的所有項目

注意:
這裡要小心結尾是不能再寫逗號的,如果多了一個逗號將會報錯

let [a, ...b,] = [1, 2, 3];// SyntaxError: rest element may not have a trailing comma
登入後複製

#嵌套數組解構

像物件一樣,數組也可以進行嵌套解構

範例:

const color = ['#FF00FF', [255, 0, 255], 'rgb(255, 0, 255)'];
// Use nested destructuring to assign red, green and blue
// 使用嵌套解构赋值 red, green, blue
const [hex, [red, green, blue]] = color;
console.log(hex, red, green, blue); // #FF00FF 255 0 255
登入後複製

字串解構

#在陣列解構中,解構的目標若為可遍歷對象,皆可進行解構賦值,可遍歷物件即實作Iterator介面的資料

let [a, b, c, d, e] = 'hello';/*
a = 'h'
b = 'e'
c = 'l'
d = 'l'
e = 'o'
*/
登入後複製

物件解構

基礎物件解構

let x = { y: 22, z: true };
let { y, z } = x; // let {y:y,z:z} = x;的简写

console.log(y); // 22
console.log(z); // true
登入後複製

賦值給新變數名稱

當使用物件解構時可以改變變數的名稱

let o = { p: 22, q: true };
let { p: foo, q: bar } = o;

console.log(foo); // 22
console.log(bar); // true
登入後複製

如上程式碼var {p: foo} = o 取得物件o 的屬性名p,然後賦值給一個名稱為foo 的變數

解構預設值

如果解構取出的物件值是undefined,我們可以設定預設值

let { a = 10, b = 5 } = { a: 3 };

console.log(a); // 3
console.log(b); // 5
登入後複製

賦值給新物件名稱的同時提供預設值

前面提到我們賦值給新的物件名,這裡我們可以給這個新的物件名稱提供一個預設值,如果沒有解構它,就會自動使用預設值

let { a: aa = 10, b: bb = 5 } = { a: 3 };

console.log(aa); // 3
console.log(bb); // 5
登入後複製

#同時使用陣列和物件解構

在結構中陣列和物件可以一起使用

const props = [
  { id: 1, name: 'Fizz' },
  { id: 2, name: 'Buzz' },
  { id: 3, name: 'FizzBuzz' },
];

const [, , { name }] = props;
console.log(name); // "FizzBuzz"
登入後複製

不完全解構

let obj = {p: [{y: 'world'}] };
let {p: [{ y }, x ] } = obj;//不解构x

// x = undefined
// y = 'world'
登入後複製

賦值剩餘值給一個物件

let {a, b, ...rest} = {a: 10, b: 20, c: 30, d: 40};
// a = 10
// b = 20
// rest = {c: 30, d: 40}
登入後複製

嵌套物件解構(可忽略解構)

let obj = {p: ['hello', {y: 'world'}] };
let {p: [x, { y }] } = obj;
// x = 'hello'
// y = 'world'
let obj = {p: ['hello', {y: 'world'}] };
let {p: [x, {  }] } = obj;//忽略y
// x = 'hello'
登入後複製

注意事項

小心地使用已宣告變數進行解構

##錯誤示範:

let x;{x} = {x: 1};
登入後複製

JavaScript引擎會將

{x}理解為程式碼區塊,從而產生語法錯誤,我們要避免將大括號寫在行首,避免JavaScript將其解釋為程式碼區塊
正確寫法:

let x;({x} = {x: 1});
登入後複製

正確寫法將整個解構賦值語句放在一個圓括號裡,就可以正確執行了

函數參數的解構賦值

函數的參數也可以使用解構賦值

function add([x, y]) {
	return x + y;}add([1, 2]);
登入後複製

上面程式碼中,函數add的參數表面上是一個數組,但在傳參的時候,數組參數就被解構為變數x和y了,對於函數內部來說,就和直接傳入x和y是一樣的

解構的用途

解構賦值的用法很多

交換變數的值
let x = 1;
let y = 2;
[x, y] = [y, x];
登入後複製

上面的程式碼交換x和y的值,這樣的寫法不僅簡潔而且易讀,語義清晰

從函數傳回多個值

函數只能傳回一個值,如果要傳回多個值,我們只能將這些值放置數組或物件返回,當我們有了解構賦值後,從物件或數組裡取出這些值猶如探囊取物

// 返回一个数组function example() {
  return [1, 2, 3];}let [a, b, c] = example();
  // 返回一个对象
  function example() {
  return {
    foo: 1,
    bar: 2
  };
  }let { foo, bar } = example();
登入後複製

提取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数据中的值

相关推荐:javascript教程

以上是帶你來了解JavaScript解構賦值的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

如何使用WebSocket和JavaScript實現線上語音辨識系統 如何使用WebSocket和JavaScript實現線上語音辨識系統 Dec 17, 2023 pm 02:54 PM

如何使用WebSocket和JavaScript實現線上語音辨識系統引言:隨著科技的不斷發展,語音辨識技術已成為了人工智慧領域的重要組成部分。而基於WebSocket和JavaScript實現的線上語音辨識系統,具備了低延遲、即時性和跨平台的特點,成為了廣泛應用的解決方案。本文將介紹如何使用WebSocket和JavaScript來實現線上語音辨識系

WebSocket與JavaScript:實現即時監控系統的關鍵技術 WebSocket與JavaScript:實現即時監控系統的關鍵技術 Dec 17, 2023 pm 05:30 PM

WebSocket與JavaScript:實現即時監控系統的關鍵技術引言:隨著互聯網技術的快速發展,即時監控系統在各個領域中得到了廣泛的應用。而實現即時監控的關鍵技術之一就是WebSocket與JavaScript的結合使用。本文將介紹WebSocket與JavaScript在即時監控系統中的應用,並給出程式碼範例,詳細解釋其實作原理。一、WebSocket技

如何利用JavaScript和WebSocket實現即時線上點餐系統 如何利用JavaScript和WebSocket實現即時線上點餐系統 Dec 17, 2023 pm 12:09 PM

如何利用JavaScript和WebSocket實現即時線上點餐系統介紹:隨著網路的普及和技術的進步,越來越多的餐廳開始提供線上點餐服務。為了實現即時線上點餐系統,我們可以利用JavaScript和WebSocket技術。 WebSocket是一種基於TCP協定的全雙工通訊協議,可實現客戶端與伺服器的即時雙向通訊。在即時線上點餐系統中,當使用者選擇菜餚並下訂單

如何使用WebSocket和JavaScript實現線上預約系統 如何使用WebSocket和JavaScript實現線上預約系統 Dec 17, 2023 am 09:39 AM

如何使用WebSocket和JavaScript實現線上預約系統在當今數位化的時代,越來越多的業務和服務都需要提供線上預約功能。而實現一個高效、即時的線上預約系統是至關重要的。本文將介紹如何使用WebSocket和JavaScript來實作一個線上預約系統,並提供具體的程式碼範例。一、什麼是WebSocketWebSocket是一種在單一TCP連線上進行全雙工

JavaScript與WebSocket:打造高效率的即時天氣預報系統 JavaScript與WebSocket:打造高效率的即時天氣預報系統 Dec 17, 2023 pm 05:13 PM

JavaScript和WebSocket:打造高效的即時天氣預報系統引言:如今,天氣預報的準確性對於日常生活以及決策制定具有重要意義。隨著技術的發展,我們可以透過即時獲取天氣數據來提供更準確可靠的天氣預報。在本文中,我們將學習如何使用JavaScript和WebSocket技術,來建立一個高效的即時天氣預報系統。本文將透過具體的程式碼範例來展示實現的過程。 We

簡易JavaScript教學:取得HTTP狀態碼的方法 簡易JavaScript教學:取得HTTP狀態碼的方法 Jan 05, 2024 pm 06:08 PM

JavaScript教學:如何取得HTTP狀態碼,需要具體程式碼範例前言:在Web開發中,經常會涉及到與伺服器進行資料互動的場景。在與伺服器進行通訊時,我們經常需要取得傳回的HTTP狀態碼來判斷操作是否成功,並根據不同的狀態碼來進行對應的處理。本篇文章將教你如何使用JavaScript來取得HTTP狀態碼,並提供一些實用的程式碼範例。使用XMLHttpRequest

javascript如何使用insertBefore javascript如何使用insertBefore Nov 24, 2023 am 11:56 AM

用法:在JavaScript中,insertBefore()方法用於在DOM樹中插入一個新的節點。這個方法需要兩個參數:要插入的新節點和參考節點(即新節點將要插入的位置的節點)。

JavaScript與WebSocket:打造高效率的即時影像處理系統 JavaScript與WebSocket:打造高效率的即時影像處理系統 Dec 17, 2023 am 08:41 AM

JavaScript是一種廣泛應用於Web開發的程式語言,而WebSocket則是一種用於即時通訊的網路協定。結合二者的強大功能,我們可以打造一個高效率的即時影像處理系統。本文將介紹如何利用JavaScript和WebSocket來實作這個系統,並提供具體的程式碼範例。首先,我們需要明確指出即時影像處理系統的需求和目標。假設我們有一個攝影機設備,可以擷取即時的影像數

See all articles