摘要:數組的解構賦值允許按照一定模式,從數組和對象中提取值,對變量進行賦值,這被稱為解構。如果變量名與屬性名不一致,必須寫成下面這樣。
1 數組的解構賦值
ES6允許按照一定模式,從數組和對象中提取值,對變量進行賦值,這被稱為解構(Destructuring)。
基本用法
{ var [a,[b,c],d,,...f] = [1,[2,3],4,5,6,7]; console.log(a); //1 console.log(b); //2 console.log(c); //3 console.log(d); //4 console.log(f); //[6,7] }
另一種情況是不完全解構,解構賦值不僅適用于var命令,也適用于let和const命令
let [a,[b],c] = [1,[2,3],4]; console.log(a,b,c); //1 2 4
默認值
解構賦值允許指定默認值,必須嚴格等于undefined時才會生效
let [a,b = 1] = [1,undefined]; console.log(a,b); //1 1
如果默認值是一個表達式,那么這個表達式是默認求值的
let [a = f()] = [undefined]; function f() { return 2; } console.log(a); //2如果不是undefined,f()不會求值2 對象的解構賦值
解構不僅可以用于數組,還可以用于對象。
let {a,b} = {a: 1, b:2} console.log(a,b); //1 2
如果變量名與屬性名不一致,必須寫成下面這樣。
let {a:a2,b} = {a: 1, b:2} console.log(a2,b); //1 2
對于let、const而言,變量不能重新聲明,所以一旦賦值的變量之前聲明過,則會報錯
let a2 let {a:a2,b} = {a: 1, b:2} console.log(a2,b); //Identifier "a2" has already been declared
所以需要寫成下面的形式:
let a2 ({a:a2,b} = {a: 1, b:2}) console.log(a2,b); //1 2
這里需要加上小括弧,因為要避免JS引擎將{x}理解為一個代碼塊
也可以用于嵌套解構的對象
var obj = { persion: [ {name: "Oliver"}, {friends: ["Alice", "Troy"]} ] } var {persion: [{name},{friends}]} = obj; console.log(name,friends); //Oliver ["Alice", "Troy"]
對象的解構也可以指定默認值
var {prop:x = 3} = {prop:undefined}; console.log(x); //3
默認值生效的條件是對象的屬性值嚴格等于undefined
對象的解構賦值可以很方便地將現有對象的方法賦值到某個變量
var obj = { name: "Oliver", age: 18 }; var {name,age: x} = obj; console.log(name,x); //Oliver 183 字符串的解構賦值
字符串也可以解構賦值
var {string: [a,b,c]} = {string: "str"}; console.log(a,b,c); //s t r
也可以訪問其屬性
var {length: len} = "hello"; console.log(len); //54 數值和布爾值的解構賦值
解構賦值時,如果等號右邊是數值和布爾值,則會先轉為對象。
let {toString: str} = 123; console.log(str); //toString() { [native code] } //兩者都有toString方法(函數)5 函數參數的解構賦值
函數的參數也可以解構賦值
function add([x,y]) { console.log(x+y); } add([1,2]); //3
也可以使用默認值
function add([x,y] = [0,0]) { console.log(x+y); } add([1,2]); //3 add(); //06 圓括號問題
盡量不要在模式中使用圓括號
7 實際用途交換變量的值
var [x,y] = [1,2]; [x,y] = [y,x]; console.log(x,y); //2 1
從函數返回多個值
//返回數組 function init() { return [1,2,3]; } var [a,b,c] = init(); console.log(a,b,c); //1 2 3 //返回對象 function init() { return { name: "Oliver", age: 18 }; } var {name: n, age: a} = init(); console.log(n,a); //Oliver 18 var {name} = init(); console.log(name); //Oliver
函數參數的定義
//有序的數組 function init([x,y,z]) { return x+y+z; } console.log(init([1,2,3])); //6 //無序的對象 function init({x,y,z}) { return x+y+z; } console.log(init({z:1,y:2,x:3})); //6
提取JSON數據
var obj = {}; var jsonData = { name: "Oliver", id: "007", upload: [1,2,3] }; { let {name,id,upload} = jsonData; console.log(name,id,upload); //Oliver 007 [1, 2, 3] }
函數參數默認值
function f([x,y] = [1,1]) { console.log(x+y); } f(); //2
遍歷Map結構
var 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
輸入模塊的指定方法
const { SourceMapConsumer, SourceNode } = require("source-map");
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/79059.html
摘要:一簡介與的關系是的規格,是的一種實現另外的方言還有和轉碼器命令行環境安裝直接運行代碼命令將轉換成命令瀏覽器環境加入,代碼用環境安裝,,根目錄建立文件加載為的一個鉤子設置完文件后,在應用入口加入若有使用,等全局對象及上方法安裝 一、ECMAScript6 簡介 (1) 與JavaScript的關系 ES是JS的規格,JS是ES的一種實現(另外的ECMAScript方言還有Jscript和...
摘要:默認值同時,對象解構賦值也允許設置默認值,默認值生效的判斷條件同數組,只有在對應值嚴格等于時會生效。報錯如果要將一個已經聲明的變量用于解構賦值,必須非常小心。的規則是,只要有可能導致解構的歧義,就不得使用圓括號。 ECMAScript6/ES6 入門 let和const命令 四、變量的解構賦值 在ES6之前,數組和對象屬性賦值只能直接指定固定值,ES6 允許按照一定模式,從數組和對象中...
摘要:數組的解構賦值特點根據數據的下標來賦值的,有次序。模式能夠匹配起來,如長度為數值和布爾值的解構賦值解構賦值的規則是只要等號右邊的值不是對象或數組,就先將其轉為對象。布爾值解構賦值為字符串的一種。在很多獨立細小的方面,解構賦值都非常有用。 1、解構賦值簡介 官方解釋:按照一定的模式,從數組和對象中提取值,對變量進行賦值,這被稱為解構(Destructuring)。 舉個例子,想獲取數組中...
閱讀 1751·2023-04-25 22:42
閱讀 2202·2021-09-22 15:16
閱讀 3486·2021-08-30 09:44
閱讀 485·2019-08-29 16:44
閱讀 3304·2019-08-29 16:20
閱讀 2512·2019-08-29 16:12
閱讀 3387·2019-08-29 16:07
閱讀 667·2019-08-29 15:08