數(shù)組的解構(gòu)賦值
ES6允許按照一定模式椎扬,從數(shù)組和對象中提取值尺迂,對變量進(jìn)行賦值,這被稱為解構(gòu)(Destructuring)茧球。
另一種情況是不完全解構(gòu)庭瑰,即等號左邊的模式,只匹配一部分的等號右邊的數(shù)組抢埋。這種情況下弹灭,解構(gòu)依然可以成功。
對象的解構(gòu)賦值
解構(gòu)不僅可以用于數(shù)組揪垄,還可以用于對象穷吮。
對象的解構(gòu)與數(shù)組有一個重要的不同。數(shù)組的元素是按次序排列的饥努,變量的取值由它的位置決定;而對象的屬性沒有次序捡鱼,變 量必須與屬性同名,才能取到正確的值酷愧。
var { bar, foo } = { foo: "aaa", bar: "bbb" }; foo // "aaa"
bar // "bbb"
var { baz } = { foo: "aaa", bar: "bbb" }; baz // undefined
二個例子的變量沒有對應(yīng)的同名屬性驾诈,導(dǎo)致取不到值,最后等于 undefined 溶浴。
字符串的解構(gòu)
賦值
數(shù)值和布爾值的解構(gòu)賦值
函數(shù)參數(shù)的解構(gòu)賦值
函數(shù)參數(shù)的解構(gòu)賦值
函數(shù)的參數(shù)也可以使用解構(gòu)賦值乍迄。
function add([x, y]){ return x + y;
}
add([1, 2]); // 3
上面代碼中,函數(shù) add 的參數(shù)表面上是一個數(shù)組士败,但在傳入?yún)?shù)的那一刻闯两,數(shù)組參數(shù)就被解構(gòu)成變量 x 和 y 。對于函數(shù)內(nèi) 部的代碼來說谅将,它們能感受到的參數(shù)就是 x 和 y 漾狼。
圓括號問題
不能使用圓括號的情況
以下三種解構(gòu)賦值不得使用圓括號。 (1)變量聲明語句中饥臂,不能帶有圓括號逊躁。
(2)函數(shù)參數(shù)中,模式不能帶有圓括號隅熙。 函數(shù)參數(shù)也屬于變量聲明志衣,因此不能帶有圓括號。
// 報(bào)錯
function f([(z)]) { return z; }
可以使用圓括號的情況
[(b)] = [3]; // 正確
({ p: (d) } = {}); // 正確 [(parseInt.prop)] = [3]; // 正確
解構(gòu)用途
(1)交換變量的值
[x, y] = [y, x];
(2)從函數(shù)返回多個值
函數(shù)只能返回一個值猛们,如果要返回多個值,只能將它們放在數(shù)組或?qū)ο罄锓祷啬蟆S辛私鈽?gòu)賦值弯淘,取出這些值就非常方便。
function example() { return {
foo: 1,
bar: 2 };
}
var { foo, bar } = example();
(3)函數(shù)參數(shù)的定義
(3)函數(shù)參數(shù)的定義
(4)提取JSON數(shù)據(jù)
var jsonData = { id: 42,
status: "OK",
data: [867, 5309] };
let { id, status, data: number } = jsonData;
console.log(id, status, number); // 42, "OK", [867, 5309]
(5)函數(shù)參數(shù)的默認(rèn)值
(6)遍歷Map結(jié)構(gòu)
任何部署了Iterator接口的對象吉懊,都可以用 for...of 循環(huán)遍歷庐橙。Map結(jié)構(gòu)原生支持Iterator接口假勿,配合變量的解構(gòu)賦值,獲取鍵 名和鍵值就非常方便态鳖。
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
(7)輸入模塊的指定方法 加載模塊時转培,往往需要指定輸入那些方法。解構(gòu)賦值使得輸入語句非常清晰浆竭。
const { SourceMapConsumer, SourceNode } =require("source-map");
作者開發(fā)經(jīng)驗(yàn)總結(jié)的文章推薦,持續(xù)更新學(xué)習(xí)心得筆記
五星推薦 Runtime 10種用法(沒有比這更全的了)
五星推薦 成為iOS頂尖高手浸须,你必須來這里(這里有最好的開源項(xiàng)目和文章)
五星推薦 iOS逆向Reveal查看任意app 的界面
五星推薦手把手教你使用python自動打包上傳應(yīng)用分發(fā)
JSPatch (實(shí)時修復(fù)App Store bug)學(xué)習(xí)(一)
iOS 高級工程師是怎么進(jìn)階的(補(bǔ)充版20+點(diǎn))
擴(kuò)大按鈕(UIButton)點(diǎn)擊范圍(隨意方向擴(kuò)展哦)
最簡單的免證書真機(jī)調(diào)試(原創(chuàng))
通過分析微信app,學(xué)學(xué)如何使用@2x,@3x圖片
TableView之MVVM與MVC之對比
使用MVVM減少控制器代碼實(shí)戰(zhàn)(減少56%)
ReactiveCocoa添加cocoapods 配置圖文教程及坑總結(jié)