欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

深入理解JavaScript 解構(gòu)賦值

 更新時(shí)間:2024年09月10日 10:19:59   作者:代碼里的小貓咪  
JavaScript的解構(gòu)賦值是ES6引入的語法,允許以簡(jiǎn)潔的方式從數(shù)組或?qū)ο笾刑崛?shù)據(jù)并賦值給變量,包括數(shù)組解構(gòu)、對(duì)象解構(gòu)、參數(shù)解構(gòu)、變量交換等,它可以大幅簡(jiǎn)化代碼,提高開發(fā)效率,下面就一起來了解一下

JavaScript 的解構(gòu)賦值是一種從數(shù)組 or 對(duì)象中提取值并將其賦給變量的語法。這種語法讓我們從復(fù)雜的數(shù)據(jù)結(jié)構(gòu)中提取數(shù)據(jù)變得簡(jiǎn)潔和易讀。解構(gòu)賦值可以用在數(shù)組、對(duì)象以及嵌套結(jié)構(gòu)中。

解構(gòu)是:使用 ES6 的一種語法規(guī)則,將一個(gè)對(duì)象或數(shù)組的某個(gè)屬性提取到某個(gè)變量中。

解構(gòu)不會(huì)對(duì)被解構(gòu)的目標(biāo)造成任何影響。

1. 數(shù)組解構(gòu)賦值

數(shù)組解構(gòu)賦值允許我們將數(shù)組中的值提取到變量中?;菊Z法如下:

const [a, b, c] = [1, 2, 3];
console.log(a); // 1
console.log(b); // 2
console.log(c); // 3

如果數(shù)組的某個(gè)位置沒有值,可以為其設(shè)置默認(rèn)值:

const [x = 1, y = 2] = [10];
console.log(x); // 10
console.log(y); // 2

使用 ... 運(yùn)算符可以將剩余的元素放入一個(gè)數(shù)組中:

const [first, ...rest] = [1, 2, 3, 4, 5];
console.log(first); // 1
console.log(rest);  // [2, 3, 4, 5]

2. 對(duì)象解構(gòu)賦值

對(duì)象解構(gòu)賦值允許我們將對(duì)象的屬性值提取到變量中?;菊Z法如下:

const { name, age } = { name: 'Alice', age: 18 };
console.log(name); // 'Alice'
console.log(age);  // 18

如果對(duì)象中沒有指定的屬性,可以為其設(shè)置默認(rèn)值:

const { name, age = 30 } = { name: 'Bob' };
console.log(name); // 'Bob'
console.log(age);  // 30

可以給解構(gòu)出來的屬性重新命名:

const { name: fullName, age: years } = { name: 'Charlie', age: 35 };
console.log(fullName); // 'Charlie'
console.log(years);    // 35

可以解構(gòu)嵌套的對(duì)象:

const person = {
  name: 'Dave',
  address: {
    city: 'New York',
    zip: '10001'
  }
};

const { name, address: { city, zip } } = person;
console.log(name); // 'Dave'
console.log(city); // 'New York'
console.log(zip);  // '10001'

在嵌套解構(gòu)中設(shè)置默認(rèn)值:

const person = {
  name: 'Eve',
  address: {}
};

const { name, address: { city = 'Unknown' } } = person;
console.log(name); // 'Eve'
console.log(city); // 'Unknown'

3. 解構(gòu)賦值在函數(shù)參數(shù)中的應(yīng)用

解構(gòu)賦值可以直接在函數(shù)參數(shù)中使用,簡(jiǎn)化函數(shù)調(diào)用:

function greet({ name, age }) {
  console.log(`Hello ${name}, you are ${age} years old.`);
}

const user = { name: 'Frank', age: 4 };
greet(user); // Hello Frank, you are 4 years old.

4. 解構(gòu)賦值與變量交換

可以利用解構(gòu)賦值來交換變量的值: 

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

5. 注意點(diǎn)

5.1 默認(rèn)值的計(jì)算

當(dāng)使用默認(rèn)值時(shí),這些默認(rèn)值是在解構(gòu)賦值操作時(shí)計(jì)算的:

const { x = Math.random() } = {};
console.log(x); // 每次運(yùn)行都可能是不同的值

如果對(duì)象中的屬性已經(jīng)有值,則默認(rèn)值不會(huì)被使用,只在目標(biāo)屬性為 undefined 時(shí)使用。

const { x = Math.random() } = {x: 10};
console.log(x); // 10

5.2 解構(gòu)賦值中的 undefined 和 null 

解構(gòu)賦值僅對(duì) undefined 提供默認(rèn)值,不對(duì) null 提供。如果對(duì)象的屬性是 null,默認(rèn)值不生效。 

const { a = 1 } = { a: null };
console.log(a); // null

5.3  解構(gòu)賦值的深度

深度解構(gòu)需要確保每一層的對(duì)象結(jié)構(gòu)都存在。否則會(huì)引發(fā)錯(cuò)誤:

const obj = { a: { b: 1 } };
const { a: { b, c = 2 } } = obj;
console.log(b); // 1
console.log(c); // 2

// 如果 obj = {},則會(huì)拋出錯(cuò)誤
// const { a: { b, c = 2 } } = {};

5.4  解構(gòu)賦值的計(jì)算順序

在對(duì)象解構(gòu)賦值中,計(jì)算順序可能會(huì)影響結(jié)果:

const obj = { a: 1 };
const { a, b = a } = obj;
console.log(a); // 1
console.log(b); // 1

此處,a 賦值為 1,b 的默認(rèn)值是 a,因此 b 的值是 1。

const obj = { a: 1, b: 2 };
const { a = 10, b = a } = obj;
console.log(a); // 1
console.log(b); // 2

此處,a 和 b 各自存在值,均不使用默認(rèn)值。

5.5 解構(gòu)賦值與函數(shù)參數(shù)

在函數(shù)參數(shù)中使用解構(gòu)賦值時(shí),要確保傳入的參數(shù)結(jié)構(gòu)與解構(gòu)的變量名一致:

function func({ a, b }) {
  console.log(a, b);
}
func({ a: 1, b: 2 }); // 1 2
func({ a: 1 }); // 1 undefined
func({}); // undefined undefined

5.6 解構(gòu)賦值與函數(shù)默認(rèn)參數(shù)

在函數(shù)的參數(shù)解構(gòu)中使用默認(rèn)值時(shí),需要注意函數(shù)參數(shù)的默認(rèn)值的順序:

function func({ a = 1, b = a } = {}) {
  console.log(a, b);
}
func(); // 1 1
func({ a: 2 }); // 2 2
func({ b: 3 }); // 1 3

5.7 防止解構(gòu)賦值錯(cuò)誤

確保在解構(gòu)賦值之前檢查對(duì)象或數(shù)組是否存在。如果對(duì)象或數(shù)組是 null 或 undefined,嘗試解構(gòu)將會(huì)引發(fā)錯(cuò)誤:

let obj = null;
// const { a } = obj; // 這會(huì)拋出錯(cuò)誤

obj = {};
const { a = 1 } = obj;
console.log(a); // 1

5.8 解構(gòu)賦值中的計(jì)算屬性名

如果需要解構(gòu)具有動(dòng)態(tài)計(jì)算屬性名的對(duì)象,確保正確地使用方括號(hào)語法:

const key = 'b';
const obj = { a: 1, [key]: 2 };

const { [key]: value } = obj;
console.log(value); // 2

到此這篇關(guān)于深入理解JavaScript 解構(gòu)賦值的文章就介紹到這了,更多相關(guān)JavaScript 解構(gòu)賦值內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • JavaScript通過function定義對(duì)象并給對(duì)象添加toString()方法實(shí)例分析

    JavaScript通過function定義對(duì)象并給對(duì)象添加toString()方法實(shí)例分析

    這篇文章主要介紹了JavaScript通過function定義對(duì)象并給對(duì)象添加toString()方法,實(shí)例分析了javascript中function定義對(duì)象及添加方法的使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-03-03
  • 第十章之巨幕頁頭縮略圖與警告框組件

    第十章之巨幕頁頭縮略圖與警告框組件

    Bootstrap,來自 Twitter,是目前最受歡迎的前端框架。Bootstrap 是基于 HTML、CSS、JAVASCRIPT 的,它簡(jiǎn)潔靈活,使得 Web 開發(fā)更加快捷。本文給大家介紹BootStrap組件第十章之巨幕頁頭縮略圖和警告框組件 的相關(guān)資料,需要的朋友可以參考下
    2016-04-04
  • Javascript排序算法之計(jì)數(shù)排序的實(shí)例

    Javascript排序算法之計(jì)數(shù)排序的實(shí)例

    計(jì)數(shù)排序是一種高效的線性排序,它通過計(jì)算一個(gè)集合中元素楚翔的次數(shù)來確定集合如何排列,計(jì)數(shù)排序不需要進(jìn)行數(shù)據(jù)的比較,所有他的運(yùn)行效率前面介紹的都高
    2014-04-04
  • VS Code轉(zhuǎn)換大小寫、修改選中文字或代碼顏色的方法

    VS Code轉(zhuǎn)換大小寫、修改選中文字或代碼顏色的方法

    最近在使用VS Code,發(fā)現(xiàn)了不少使用的小技巧,覺著有必要給大家分享下,下面這篇文章主要給大家介紹了關(guān)于VS Code轉(zhuǎn)換大小寫、修改選中文字或代碼顏色的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-12-12
  • js實(shí)現(xiàn)單層數(shù)組轉(zhuǎn)多層樹

    js實(shí)現(xiàn)單層數(shù)組轉(zhuǎn)多層樹

    這篇文章主要介紹了js實(shí)現(xiàn)單層數(shù)組轉(zhuǎn)多層樹方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • RequireJS簡(jiǎn)易繪圖程序開發(fā)

    RequireJS簡(jiǎn)易繪圖程序開發(fā)

    這篇文章主要為大家詳細(xì)介紹了使用RequireJS簡(jiǎn)易繪圖程序開發(fā),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • JavaScript Image對(duì)象實(shí)現(xiàn)原理實(shí)例解析

    JavaScript Image對(duì)象實(shí)現(xiàn)原理實(shí)例解析

    這篇文章主要介紹了JavaScript Image對(duì)象實(shí)現(xiàn)原理實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • JS二叉樹的簡(jiǎn)單實(shí)現(xiàn)方法示例

    JS二叉樹的簡(jiǎn)單實(shí)現(xiàn)方法示例

    這篇文章主要介紹了JS二叉樹的簡(jiǎn)單實(shí)現(xiàn)方法,結(jié)合具體實(shí)例形式分析了基于javascript定義二叉樹及二叉樹節(jié)點(diǎn)的遍歷、查找、添加、刪除及運(yùn)算相關(guān)操作技巧,需要的朋友可以參考下
    2017-04-04
  • 千萬別錯(cuò)過的JavaScript?sort方法使用指南

    千萬別錯(cuò)過的JavaScript?sort方法使用指南

    sort方法在我們的日常開發(fā)中是經(jīng)常使用的,sort方法一般是用來對(duì)數(shù)組進(jìn)行排序的,但是你是否知道sort方法默認(rèn)是按什么方式排序的呢?下面就和我一起來深入了解sort方法吧
    2023-05-05
  • javascript基礎(chǔ)知識(shí)之html5輪播圖實(shí)例講解(44)

    javascript基礎(chǔ)知識(shí)之html5輪播圖實(shí)例講解(44)

    這篇文章主要為大家詳細(xì)介紹了javascript基礎(chǔ)知識(shí)之html5輪播圖,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-02-02

最新評(píng)論