日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

詳解JS ES6變量的解構(gòu)賦值

瀏覽:226日期:2024-03-29 14:56:20
1.什么是解構(gòu)?

ES6允許按照一定模式,從數(shù)組和對(duì)象中提取值,對(duì)變量進(jìn)行賦值,這被稱為解構(gòu)。它在語(yǔ)法上比ES5所提供的更加簡(jiǎn)潔、緊湊、清晰。它不僅能減少你的代碼量,還能從根本上改變你的編碼方式。

2.數(shù)組解構(gòu)

以前,為變量賦值,我們只能直接指定值,比如

let a = 1;let b = 2; let c = 3;

現(xiàn)在可以用數(shù)組解構(gòu)的方式來(lái)進(jìn)行賦值

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

這是數(shù)組解構(gòu)最基本類(lèi)型的用法,還可以解構(gòu)對(duì)象數(shù)組

// 對(duì)象數(shù)組解構(gòu)let [a, b, c] = [{name: ’jacky’}, {name: ’monkey’}, {name: ’houge’}];console.log(a, b, c); // {name: ’jacky’}, {name: ’monkey’}, {name: ’houge’}3.數(shù)組模式和賦值模式統(tǒng)一

這條可以理解為等號(hào)左邊和等號(hào)右邊的形式要統(tǒng)一,如果不統(tǒng)一解構(gòu)將失敗。

let [a, [b, c], d] = [1, [2, 3], 4];console.log(a, b, c, d); // 1 2 3 4 // 提取除第二、三個(gè)外的所有數(shù)值let [a, , , d] = [1, 2, 3, 4];console.log(a, d); //1 4 let [a, ...b] = [1, 2, 3, 4];console.log(a, b); // 1 [2, 3, 4]let [a, , , ...d] = [1, 2, 3, 4, 5];console.log(a, d); // 1 [4, 5]如果解構(gòu)不成功,變量的值就等于undefinedlet [a, b, c] = [2, 3];console.log(a, b, c); // 2 3 undefinedlet [c] = [];console.log(c); // undefined

如果解構(gòu)不成功,變量的值就等于undefined

let [a, b, c] = [2, 3];console.log(a, b, c); // 2 3 undefinedlet [c] = [];console.log(c); // undefined

上述是完全解構(gòu)的情況,還有一種是不完全解構(gòu),即等號(hào)左邊的模式,只匹配一部分的等號(hào)右邊的數(shù)組,解構(gòu)依然可以成功。

let [x, y] = [1, 2, 3]; console.log(x, y); // 1 2let [a, [b], d] = [1, [2, 3], 4];console.log(a, b, d); // 1 2 44.解構(gòu)的默認(rèn)值

解構(gòu)賦值允許指定默認(rèn)值。

let [a, b=2] = [1];console.log(a, b); // 1 2let [a=1, b=2, c, d=13] = [10, 11, 12];console.log(a, b, c, d); // 10 11 12 135.對(duì)象的解構(gòu)賦值

對(duì)象的解構(gòu)與數(shù)組有一個(gè)重要的不同。數(shù)組的元素是按次序排列的,變量的取值由它的位置決定;而對(duì)象的屬性沒(méi)有次序,變量必須與屬性同名,才能取到正確的值。

// 對(duì)象解構(gòu)賦值的內(nèi)部機(jī)制,是先找到同名屬性,然后再賦給對(duì)應(yīng)的變量。真正被賦值的是后者,而非前者。let obj = { a: 'aaa', b: 'bbb' };let { a: x, b: y } = obj; console.log(x, y); // aaa bbblet { a, b } = { a: ’aaa’, b: ’bbb’ };console.log(a, b); // aaa bbb// 不按照順序let { b, a } = { a: ’test1’, b: ’test2’ }console.log(a, b) // test1 test2// 嵌套解構(gòu)let { obj: { name }} = { obj: { name: ’jacky’, age: ’22’ } }console.log(name) // jacky// 稍微復(fù)雜的嵌套let obj = { p: [’Hello’,{ y: ’World’ } ]};let { p: [x, { y }] } = obj;console.log(x, y); // Hello World

如果變量名與屬性名不一致,必須寫(xiě)成下面這樣。

var { foo: rename } = { foo: 'aaa',bar: 'bbb' };console.log(rename); // aaaconsole.log(foo); // Uncaught ReferenceError: foo is not defined

如果在解構(gòu)之前就定義了變量,這時(shí)候再解構(gòu)會(huì)出現(xiàn)問(wèn)題。下面是錯(cuò)誤的代碼,編譯會(huì)報(bào)錯(cuò)(因?yàn)閖s引擎會(huì)將{a}理解成一個(gè)代碼塊,從而發(fā)生語(yǔ)法錯(cuò)誤。只有不將大括號(hào)寫(xiě)在行首,避免js將其解釋成代碼塊,才能解決這個(gè)問(wèn)題)

let a;let obj = { a: 'aaa' };{a} = obj; // Uncaught SyntaxError: Unexpected token ’=’

要解決報(bào)錯(cuò),使程序正常,這時(shí)候只要在解構(gòu)的語(yǔ)句外邊加一個(gè)圓括號(hào)就可以了

let a;let obj = { a: 'aaa' };( {a} = obj );console.log(a); // aaa6.函數(shù)參數(shù)

函數(shù)的參數(shù)也可以使用解構(gòu)賦值。

function add([x, y]){ return x + y;}add([1, 2]); // 3

函數(shù)參數(shù)的解構(gòu)也可以使用默認(rèn)值。

function fn(x, y = 7) { return x + y;}console.log(fn(3)); // 107.字符串解構(gòu)

字符串被轉(zhuǎn)換成了一個(gè)類(lèi)似數(shù)組的對(duì)象。

const [a, b, c, d, e, f] = 'hello';console.log(a); //hconsole.log(b); //econsole.log(c); //lconsole.log(d); //lconsole.log(e); //oconsole.log(f); //undefined8.數(shù)值和布爾值的解構(gòu)賦值

解構(gòu)賦值時(shí),如果等號(hào)右邊是數(shù)值和布爾值,則會(huì)先轉(zhuǎn)為對(duì)象。

let {toString: s} = 0;console.log(s === Number.prototype.toString); // truelet {toString: s} = true;console.log(s === Boolean.prototype.toString); // true

解構(gòu)賦值的規(guī)則是,只要等號(hào)右邊的值不是對(duì)象或數(shù)組,就先將其轉(zhuǎn)為對(duì)象。由于undefined和null無(wú)法轉(zhuǎn)為對(duì)象,所以對(duì)它們進(jìn)行解構(gòu)賦值,都會(huì)報(bào)錯(cuò)

let { prop: x } = undefined; // TypeErrorlet { prop: y } = null; // TypeError9.解構(gòu)賦值的應(yīng)用1.交換變量的值

通常交換兩個(gè)變量的方法需要一個(gè)額外的臨時(shí)變量,如下

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

用ES6解構(gòu)賦值的話,會(huì)變得很簡(jiǎn)潔

let a = 1;let b = 2;[a, b] = [b ,a];console.log(a, b); // 2 12.從函數(shù)返回多個(gè)值

函數(shù)只能返回一個(gè)值,如果要返回多個(gè)值,只能將它們放在數(shù)組或?qū)ο罄锓祷亍S辛私鈽?gòu)賦值,取出這些值就非常方便。

// 返回一個(gè)數(shù)組function example() { return [1, 2, 3];}let [a, b, c] = example();// 返回一個(gè)對(duì)象function example() { return { foo: 1, bar: 2 };}let { foo, bar } = example();3.訪問(wèn)數(shù)組中元素

有種場(chǎng)景,比如有一個(gè)數(shù)組(可能為空)。并且希望訪問(wèn)數(shù)組的第一個(gè)、第二個(gè)或第n個(gè)項(xiàng),但如果該項(xiàng)不存在,則使用指定默認(rèn)值。

通常會(huì)使用數(shù)組的length屬性來(lái)判斷

const list = [];let firstItem = ’hello’;if (list.length > 0) { firstItem = list[0];}console.log(firstItem); // hello

如果用ES6解構(gòu)賦值來(lái)實(shí)現(xiàn)上述邏輯

const list = [];const [firstItem = ’hello’] = list;console.log(firstItem); // ’hello’4.提取 JSON數(shù)據(jù)

let jsonData = { id: 42, status: 'OK', data: [867, 5309]};let { id, status, data: number } = jsonData;console.log(id, status, number);// 42, 'OK', [867, 5309]5.遍歷 Map 結(jié)構(gòu)

任何部署了 Iterator 接口的對(duì)象,都可以用for...of循環(huán)遍歷。Map 結(jié)構(gòu)原生支持 Iterator 接口,配合變量的解構(gòu)賦值,獲取鍵名和鍵值就非常方便。

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

如果只想獲取鍵名,或者只想獲取鍵值,可以寫(xiě)成下面這樣。

// 獲取鍵名for (let [key] of map) { // ...}// 獲取鍵值for (let [,value] of map) { // ...}

以上就是詳解JS ES6變量的解構(gòu)賦值的詳細(xì)內(nèi)容,更多關(guān)于JS ES6變量解構(gòu)賦值的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: JavaScript
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
狠狠操综合网| 精品在线99| 日韩精品第二页| 亚洲精品日本| 日本在线一区二区三区| 日韩av二区在线播放| 日本视频一区二区| 国产精品视频一区二区三区综合| 国产精品久久免费视频| 久久99精品久久久野外观看| 精品日韩一区| 亚洲91久久| 婷婷精品视频| 国产毛片一区| 天堂va欧美ⅴa亚洲va一国产| 欧美天堂一区二区| 精品美女在线视频| 亚洲黄色免费av| 久久亚洲精品中文字幕蜜潮电影| 丰满少妇一区| 亚洲高清成人| 免费人成网站在线观看欧美高清| 日韩高清在线不卡| 精品日韩一区| 999精品在线| 日韩精品一二区| 青草国产精品| 精品国产一区二| 特黄毛片在线观看| 一本一本久久| 国产欧美一区二区三区精品观看| 精品久久久网| 伊人精品一区| 亚洲精品黄色| 老牛国内精品亚洲成av人片| 亚洲h色精品| 综合一区二区三区| 你懂的网址国产 欧美| 欧美亚洲精品在线| 日韩久久99| 亚洲综合电影| 亚洲精品综合| 国产一区福利| 9国产精品视频| 国产精品va视频| 99国产精品免费视频观看| 最近国产精品视频| 精品国产亚洲日本| 欧美综合国产| 水蜜桃久久夜色精品一区| 另类国产ts人妖高潮视频| 欧美a一区二区| 99国产精品| 精品国产精品国产偷麻豆| 一区三区视频| 麻豆国产精品777777在线| 亚洲激情国产| 精品视频自拍| 亚洲欧美网站| 91欧美日韩| 日韩国产一二三区| 宅男在线一区| 精品视频一区二区三区四区五区| 国产视频一区三区| 国产白浆在线免费观看| 欧美三区不卡| 麻豆9191精品国产| 一区二区三区四区日本视频| 国产欧美在线| 免费日韩av片| 99久久久久国产精品| 精品视频网站| 日韩国产欧美三级| 激情婷婷欧美| 国产成人免费| 国产欧美久久一区二区三区| 天堂av在线一区| 久久久久亚洲| 精品三级av| 日韩avvvv在线播放| 五月婷婷六月综合| 国产一区2区在线观看| 97se亚洲| 亚洲另类av| 夜久久久久久| 国产字幕视频一区二区| 亚洲美女久久| 亚洲欧美日韩在线观看a三区 | 群体交乱之放荡娇妻一区二区| 日韩高清一区二区| 日韩专区一卡二卡| 一区在线视频观看| 99视频精品全国免费| 福利一区在线| 精品香蕉视频| 国产精品欧美三级在线观看| 亚洲精品在线a| 午夜一区在线| 亚洲精品91| 日韩欧美一区二区三区在线观看 | 久久精品日韩欧美| 国产人成精品一区二区三| 中文字幕免费一区二区| 午夜一级久久| 香蕉久久国产| 蜜桃视频一区二区三区在线观看| 99国产精品久久久久久久| 欧美影院三区| 久久国产成人午夜av影院宅| 综合日韩av| 日韩av自拍| 97精品97| 国产成人a视频高清在线观看| 美女国产精品久久久| 久久丁香四色| 久久99影视| 久久一区视频| 日本黄色精品| 日韩理论视频| 久久精品中文| 蜜桃视频欧美| 99在线观看免费视频精品观看| 国产亚洲高清视频| 免费观看久久久4p| 中文字幕亚洲在线观看| 视频精品一区| 欧美日韩中文| 国产欧美一区二区三区精品观看| 国产三级一区| 精品欧美日韩精品| 亚洲黄色中文字幕| 日韩不卡在线| 精品在线播放| 日本 国产 欧美色综合| 日韩久久99| 国产精品亚洲综合久久| 精品久久国产一区| 国产成人精品亚洲日本在线观看| 久久国产影院| 国产亚洲精品久久久久婷婷瑜伽| 三级欧美韩日大片在线看| 日韩国产精品久久久久久亚洲| 日本午夜精品视频在线观看| 欧美1区二区| 中文另类视频| 香蕉成人久久| 日韩av网站在线免费观看| 欧美国产日韩电影| 国产一区二区三区日韩精品| 99热精品久久| 亚洲人成在线影院| 久久福利在线| 欧美丝袜一区| 亚洲精品九九| 欧美aaaaaa午夜精品| 韩国久久久久久| 在线亚洲观看| 日本亚洲最大的色成网站www| 久久av免费| 激情五月综合网| 日韩精品欧美大片| 国产传媒在线观看| 免费视频最近日韩| 国产美女亚洲精品7777| 精品捆绑调教一区二区三区| 欧美在线综合| 国产精品地址| 久久裸体视频| 日韩久久99| 日韩国产专区| 日韩专区视频网站| 在线中文字幕播放| 日韩专区欧美专区| 国际精品欧美精品| 丝瓜av网站精品一区二区| 精品国产亚洲一区二区三区在线| 99国产精品私拍| 麻豆成人91精品二区三区| 日韩视频免费| 国产精品tv| 中文一区在线| 国产成人免费精品| 一区二区精品| 偷拍精品精品一区二区三区| 在线一区二区三区视频| 成人在线免费观看网站| 中文在线日韩| bbw在线视频| 日韩精品免费一区二区夜夜嗨| 性欧美videohd高精| 日韩不卡一区二区三区| 99久久久久国产精品| 国产精品久久久久久久久久久久久久久 | 电影91久久久| 麻豆9191精品国产| 国产99在线| 欧美日一区二区三区在线观看国产免| 久久天堂成人| 久草精品视频| 日韩欧美久久|