在es6中 按照一定的模式 從陣列中提取數值 對對應的變數進行賦值的操作 就叫做解構賦值
本質上來講 解構賦值 就是模式匹配
基本用法
var
[a,b,c]=[
1,2,
3];
本質上,這種寫法屬於「模式匹配」,只要等號兩邊的模式相同,左邊的變數就會被賦予 對應的值
(1) 如果想要解構賦值成功 那麼就必須保證兩邊的模式完全一樣
var
[a,b,c]=[
1,[2
],];
console.
log(a,b,c)
;//1 [2]
(2).如果解構不成功 那麼變數的值就等於undefined
let
[s,t]=[
3];// console.log(s,t);
//3 , undefined 這個就像var 宣告了變數之後 不進行賦值
// let [s,t] = [3];
// console.log(s,t);
//3,undefined 這個也是屬於解構不成功 因為數值不夠
(3) 不完全解購的情況下 也可以進行解構賦值 只是後面放到數值裡的陣列都有多的數字
let
[x,y]=[
1,2,
3]; console.
log(x,y)
;//1,2
(4) 左邊可以為陣列 只要等號兩邊的模式相同就可以解析成功,可以用逗號隔開
let
[foo,
[[bar]
, baz]]=
[1,[
[2],
3]];
foo // 1
bar // 2
baz // 3
let[
,, third]=[
"foo"
,"bar"
,"baz"];
third // "baz"
(5) 可以用…鏈結,預設將左邊剩餘的全部賦值給帶有…的
let
[head,
...tail]=[
1,2,
3,4]
;head // 1
tail // [2, 3, 4]
let[x, y,
...z]=[
'a']
;x // "a"
y // undefined
z //
使用擴充套件運算子 就是乙個乙個的加到新陣列裡面去 所以即使原陣列發生變化 也不會影響新陣列
var arr=[1
,2,3
];var arr2=
[...arr]
//[1,2,3]
arr[0]
=10; console.
log(arr2)
;//[10,2,3]
擴充套件運算子的作用
1.陣列合併 類似concat方法 都是淺拷貝
2 如果修改了原陣列的指向 就會同步反應到新陣列 就是淺拷貝
3.與解構賦值相結合
(1)與解構賦值相結合 給變數和陣列賦值
var
[s,...t]=[
1,2,
3,4,
5]; console.
log(s,t)
;//1 (4) [2, 3, 4, 5]
var[s,
...t]=[
];//undefined
(2).如果將運算子用於陣列賦值 只能放在引數的最後一位 否則會報錯
let
[a,...b,c]=[
1,2,
3,2,
9];//報錯
let[
...b,a,c]=[
1,2,
3,2,
9];//報錯
(3)擴充套件運算子可以將字串轉成真正的陣列
console.
log(
[...
"hello"])
;//["h", "e", "l", "l", "o"]
var str =
"hello"
; console.
log(str.
split(""
));["h", "e", "l", "l", "o"]
(4)只有函式呼叫時 擴充套件運算子才可以放到圓括號裡 否則這種寫法就會直接報錯
(
...arr1)
;//報錯
console.
log(
[...arr1]);
console.
log(
(...arr1));
//報錯
擴充套件運算子和解構賦值的理解
var foo function a,b,c var arr 1,2,3 傳統寫法 foo arr 0 arr 1 arr 2 使用擴充套件運算子 foo arr 1 2 3 陣列深拷貝 var arr2 arr var arr3 arr console.log arr arr2 true,說明ar...
擴充套件運算子解構賦值物件注意點
1 解構賦值的拷貝是淺拷貝,即如果乙個鍵的值是復合型別的值 陣列 物件 函式 那麼解構賦值拷貝的是這個值的引用,而不是這個值的副本。let obj let obj obj.a.b 3 console.log x.a.b 32擴充套件運算子的解構賦值,不能複製繼承自原型物件的屬性。let o1 let...
擴充套件賦值運算子以及關係運算子
如 int a 3 賦值就是把3的值給予變數a.擴充套件賦值運算子 運算子用法舉例 等效的表示式 a b a a b a b a a b a b a a b a b a a b a b a a b 其他用法舉例 int a 2 int b 3 a b 3 相當於a a b 3 a b 3 相當於a ...