let shoppingList = ['Oreo', 'Tilamisu', 'snickers']
let cookie = shoppingList[0]
console.log(cookie) // 'Oreo'
如果要将阵列中的值另外存进变数,还在使用上面那种方法吗?
今天分享一个更快速将阵列或物件的资料分别撷取存入变数的方法, ES6 新语法 - 解构赋值 Destructuring assignment
// 宣告同时解构
let [cookie, cake, chocolate] = ['Oreo', 'Tilamisu', 'Snickers']
//先宣告後再解构赋值
let cookie, cake, chocolate;
[cookie, cake, chocolate] = ['Oreo', 'Tilamisu', 'Snickers']
// 阵列存变数
let shoppingList = ['Oreo', 'Tilamisu', 'Snickers']
let [cookie, cake, chocolate] = shoppingList
// 以上结果皆能取得三个个别变数
console.log(cookie) // Oreo
console.log(cake) // Tilamisu
console.log(chocolate) // Snickers
// 宣告同时解构
let {cookie, cake, chocolate} = {cookie: 'Oreo', cake: 'Tilamisu', chocolate: 'Snickers'}
console.log(cookie) // Oreo
// 先存入变数
let shoppingList = {cookie: 'Oreo', cake: 'Tilamisu', chocolate: 'Snickers'}
let {cookie, cake, chocolate} = shoppingList
console.log(cookie) // Oreo
// 修改变数名称
let {cookie: c, cake: a, chocolate: o} = {cookie: 'Oreo', cake: 'Tilamisu', chocolate: 'Snickers'}
console.log(c) // Oreo
console.log(a) // Tilamisu
console.log(o) // Snickers
须留意,若先宣告变数再使用 {}
物件解构赋值,须在最外围加上()
否则 {cookie, cake}
会被视为程序区块而非物件,结尾记得也须加上 ;
视为结束
// 先赋值後解构,须加上 ()
let cookie, cake, chocolate;
let shoppingList = {cookie: 'Oreo', cake: 'Tilamisu', chocolate: 'Snickers'}
{cookie, cake, chocolate} = shoppingList // Uncaught SyntaxError: Unexpected token '='
({cookie, cake, chocolate} = shoppingList); // 记得加上()及;
let [cookie, cake] = ['Oreo', 'Tilamisu']
[cookie, cake] = [cake, cookie]
console.log(cookie) // Tilamisu
console.log(cake) // Oreo
可以先设置预设值以防没有被赋值产生 undefined 的情况
// 无设预设值
let [cookie, cake, chocolate] = ['Oreo', 'Tilamisu']
console.log(chocolate) // undefined
let [cookie = 'none', cake = 'none', drink = 'none'] = ['Oreo', 'Tilamisu']
console.log(cookie) // Oreo
console.log(chocolate) // none
let [cookie,, chocolate] = ['Oreo', 'Tilamisu', 'Snickers']
console.log(cookie) // Oreo
console.log(chocolate) // Snikers
// 想忽略几个就加上几个逗号
let [,, chocolate] = ['Oreo', 'Tilamisu', 'Snickers']
console.log(chocolate) // Snikers
let [cookie, ...others] = ['Oreo', 'Tilamisu', 'Snickers']
console.log(cookie) // Oreo
console.log(others) // ['Tilamisu', 'Snickers']
// 范例 1
function getShoppingList() {
return ['Oreo', 'Tilamisu', 'Snikers']
}
let [cookie, cake, chocolate] = getShoppingList()
console.log(cookie) // Oreo
// 范例 2
function getShoppingAmount(cookie, cake1, cake2) {
let cakeTotal = cake1 + cake2
let total = cookie + cakeTotal;
return [cakeTotal, total]
}
let [cakeAmount, totalAmout] = getShoppingAmount(20,50,100)
console.log(cakeAmount) // 150
console.log(totalAmout) // 170
let shoppingList = {cookie: 'Oreo', cake: ['Tilamisu', 'CheeseCake'], chocolate: 'Snikers'}
let {cookie, cake:[c1, c2], chocolate} = shoppingList
console.log(c1) // Tilamisu
console.log(cake) // error! 设置的变数是 c1, c2 并不是 cake
// 将物件当参数传入 function
let shoppingList = {cookie: 'Oreo', cake: ['Tilamisu', 'CheeseCake'], chocolate: 'Snikers'}
let [cookie, cake, chocolate] = shoppingList(shoppingList)
function getItems({cookie, cake:[c1, c2], chocolate}){
return [cookie, c1, chocolate]
}
console.log(cookie) // Oreo
console.log(cake) // Tilamisu
console.log(chocolate) // Snickers
ES6 引入了一种称为 动态计算属性名 的方法,在物件取值的 []
中可以放入变数、计算式或函式,更弹性动态的取得或设定物件的属性名
let x = 'cookie'
let shoppingList = {cookie: 'Oreo'}
shoppingList[x] // Oreo
let count = 0;
let shoppingList = {['item'+ (++count)]: 'Oreo', ['item'+ (++count)]: 'Tilamisu', ['item'+ (++count)]: 'Snickers' }
console.log(shoppingList)
// {item1: 'Oreo', item2: 'Tilamisu',item3: 'Snickers'}
此种方法也可以做解构赋值
let x = 'cookie'
let shoppingList = {cookie: 'Oreo'}
shoppingList[x]
let {[x]: favorite} = shoppingList
console.log(favorite) // Oreo
学好解构赋值,绝对是你写 code 好工具
举例了这麽多,是否该来块提拉米苏呢 (๑❛ᴗ❛๑)۶
MDN - 解构赋值
ES6开始的JavaScript学习生活
How to Use Array and Object Destructuring in JavaScript
Computed Property Names
<<: [Day 13 - Git] Git版本控管,没有它救不回来的专案
placeholder ...
前情堤要 上次我们已经对回圈做了基本的介绍,那这次我们要接着继续下去,还有..我知道我这个速度很...
在前一章提到k8s是一种容器编排平台,用於管理容器化的应用程序。 而既然提到容器,那自然得提一下容器...
既然我们已经理解、实作完基本的状态机了,我们今天来多看看一些状态图,并且思索在现实世界中,我们还缺少...
关於网站 现在网站早已不像以前只是个一页式的静态网站,可能会多很多功能,例如:留言、回覆、公布栏等等...