电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

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

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

瀏覽:130日期: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)的方式來進(jìn)行賦值

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

這是數(shù)組解構(gòu)最基本類型的用法,還可以解構(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ì)象的屬性沒有次序,變量必須與屬性同名,才能取到正確的值。

// 對(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

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

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)問題。下面是錯(cuò)誤的代碼,編譯會(huì)報(bào)錯(cuò)(因?yàn)閖s引擎會(huì)將{a}理解成一個(gè)代碼塊,從而發(fā)生語(yǔ)法錯(cuò)誤。只有不將大括號(hào)寫在行首,避免js將其解釋成代碼塊,才能解決這個(gè)問題)

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è)類似數(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無法轉(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.訪問數(shù)組中元素

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

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

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

如果用ES6解構(gòu)賦值來實(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

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

// 獲取鍵名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)文章:
主站蜘蛛池模板: 重庆波纹管|重庆钢带管|重庆塑钢管|重庆联进管道有限公司 | 成都租车_成都租车公司_成都租车网_众行宝 | 单机除尘器 骨架-脉冲除尘器设备生产厂家-润天环保设备 | 福州仿石漆加盟_福建仿石漆厂家-外墙仿石漆加盟推荐铁壁金钢(福建)新材料科技有限公司有保障 | 玉米深加工机械,玉米加工设备,玉米加工机械等玉米深加工设备制造商-河南成立粮油机械有限公司 | 英思科GTD-3000EX(美国英思科气体检测仪MX4MX6)百科-北京嘉华众信科技有限公司 | 防潮防水通风密闭门源头实力厂家 - 北京酷思帝克门窗 | 雷蒙磨,雷蒙磨粉机,雷蒙磨机 - 巩义市大峪沟高峰机械厂 | 武汉高低温试验机-现货恒温恒湿试验箱-高低温湿热交变箱价格-湖北高天试验设备 | 实战IT培训机构_IT培训班选大学生IT技术培训中心_中公优就业 | 球形钽粉_球形钨粉_纳米粉末_难熔金属粉末-广东银纳官网 | 单电机制砂机,BHS制砂机,制沙机设备,制砂机价格-正升制砂机厂家 单级/双级旋片式真空泵厂家,2xz旋片真空泵-浙江台州求精真空泵有限公司 | 石油/泥浆/不锈钢防腐/砂泵/抽砂泵/砂砾泵/吸砂泵/压滤机泵 - 专业石油环保专用泵厂家 | 螺杆泵_中成泵业| 合肥仿石砖_合肥pc砖厂家_合肥PC仿石砖_安徽旭坤建材有限公司 | 3D全息投影_地面互动投影_360度立体投影_水幕灯光秀 | 广东银虎 蜂窝块状沸石分子筛-吸附脱硫分子筛-萍乡市捷龙环保科技有限公司 | 高中学习网-高考生信息学习必备平台 | 天津散热器_天津暖气片_天津安尼威尔散热器制造有限公司 | 哈希余氯测定仪,分光光度计,ph在线监测仪,浊度测定仪,试剂-上海京灿精密机械有限公司 | 冷却塔风机厂家_静音冷却塔风机_冷却塔电机维修更换维修-广东特菱节能空调设备有限公司 | 优秀的临床医学知识库,临床知识库,医疗知识库,满足电子病历四级要求,免费试用 | 本安接线盒-本安电路用接线盒-本安分线盒-矿用电话接线盒-JHH生产厂家-宁波龙亿电子科技有限公司 | 自动气象站_农业气象站_超声波气象站_防爆气象站-山东万象环境科技有限公司 | 光谱仪_积分球_分布光度计_灯具检测生产厂家_杭州松朗光电【官网】 | 防爆暖风机_防爆电暖器_防爆电暖风机_防爆电热油汀_南阳市中通智能科技集团有限公司 | 工业胀紧套_万向节联轴器_链条-规格齐全-型号选购-非标订做-厂家批发价格-上海乙谛精密机械有限公司 | 物流公司电话|附近物流公司电话上门取货 | 拉伸膜,PE缠绕膜,打包带,封箱胶带,包装膜厂家-东莞宏展包装 | 许昌奥仕达自动化设备有限公司 | 防勒索软件_数据防泄密_Trellix(原McAfee)核心代理商_Trellix(原Fireeye)售后-广州文智信息科技有限公司 | 北京康百特科技有限公司-分子蒸馏-短程分子蒸馏设备-实验室分子蒸馏设备 | 钢格板_钢格栅_格栅板_钢格栅板 - 安平县鑫拓钢格栅板厂家 | 祝融环境-地源热泵多恒系统高新技术企业,舒适生活环境缔造者! | 不锈钢复合板|钛复合板|金属复合板|南钢集团安徽金元素复合材料有限公司-官网 | 实战IT培训机构_IT培训班选大学生IT技术培训中心_中公优就业 | (中山|佛山|江门)环氧地坪漆,停车场地板漆,车库地板漆,聚氨酯地板漆-中山永旺地坪漆厂家 | 菲希尔X射线测厚仪-菲希尔库伦法测厚仪-无锡骏展仪器有限责任公司 | 电机修理_二手电机专家-河北豫通机电设备有限公司(原石家庄冀华高压电机维修中心) | 台湾阳明固态继电器-奥托尼克斯光电传感器-接近开关-温控器-光纤传感器-编码器一级代理商江苏用之宜电气 | 抓斗式清污机|螺杆式|卷扬式启闭机|底轴驱动钢坝|污水处理闸门-方源水利机械 | 北京易通慧公司从事北京网站优化,北京网络推广、网站建设一站式服务商-北京网站优化公司 |