1. 程式人生 > 實用技巧 >Js變數的解構賦值

Js變數的解構賦值

解構:從陣列和物件中提取值,對變數進行賦值。

一、陣列的解構賦值

1.陣列的元素是按次序排列的,變數的取值由它的位置決定

// 模式匹配

let [a, b, c] = [1, 2, 3];

let [foo, [[bar], baz]] = [1, [[2], 3]];
foo // 1
bar // 2
baz // 3

let [ , , third] = ["foo", "bar", "baz"];
third // "baz"

let [x, , y] = [1, 2, 3];
x // 1
y // 3

let [head, ...tail] = [1, 2, 3, 4];
head // 1
tail // [2, 3, 4]

let [x, y, ...z] = ['a'];
x // "a"
y // undefined
z // []

2.預設值

// 當一個數組成員嚴格等於undefined,預設值才會生效

let [foo = true] = [];
foo // true

let [x, y = 'b'] = ['a']; // x='a', y='b'
let [x, y = 'b'] = ['a', undefined]; // x='a', y='b'


// 預設值可以引用解構賦值的其他變數,但該變數必須已經宣告。

let [x = 1, y = x] = [];     // x=1; y=1
let [x = 1, y = x] = [2];    // x=2; y=2
let [x = 1, y = x] = [1, 2]; // x=1; y=2
let [x = y, y = 1] = [];     // ReferenceError: y is not defined

資源搜尋網站大全 https://www.renrenfan.com.cn 廣州VI設計公司https://www.houdianzi.com

二、物件的解構賦值

1.物件的屬性沒有次序,變數必須與屬性同名,才能取到正確的值。物件的解構賦值可以取到繼承的屬性。

let { bar, foo } = { foo: 'aaa', bar: 'bbb' };
foo // "aaa"
bar // "bbb"

let { baz } = { foo: 'aaa', bar: 'bbb' };
baz // undefined


// 例一
let { log, sin, cos } = Math;

// 例二
const
{ log } = console; log('hello') // hello //如果變數名與屬性名不一致,必須寫成下面這樣。 let { foo: baz } = { foo: 'aaa', bar: 'bbb' }; baz // "aaa" let obj = { first: 'hello', last: 'world' }; let { first: f, last: l } = obj; f // 'hello' l // 'world'

2.預設值。預設值生效的條件是,物件的屬性值嚴格等於undefined。

var {x = 3} = {};
x // 3

var {x, y = 5} = {x: 1};
x // 1
y // 5

var {x: y = 3} = {};
y // 3

var {x: y = 3} = {x: 5};
y // 5

var { message: msg = 'Something went wrong' } = {};
msg // "Something went wrong"