1. 程式人生 > 其它 >typora-結合gitee+PicGO設定圖床

typora-結合gitee+PicGO設定圖床

解構賦值
注意:解構賦值宣告和賦值必須在一起,不能先聲明後賦值

//不可以這樣寫,會報錯****
let [a,b];
[a,b]=[1,2]
  • 陣列的解構賦值
 
//陣列的解構賦值
 
//在以前我們想要定義三個變數的話
let a = 1;
let b = 2;
let c = 3;
console.log(a); //1
console.log(b); //2
console.log(c); //3

//es6之後我們可以利用解構賦值,就可以一 一對應
let [a, b, c] = [1, 2, 3];
console.log(a); //1
console.log(b); //2
console.log(c); //3

(1)只要等號兩邊的模式是相同的,就可以解構成功。注意這裡指的是資料形式要一模一樣,不一樣會報錯

let [a,[b],c]=[1,[3],8]
console.log(a); //1
console.log(b); //3
console.log(c); //8

//以下情況就會報錯,因為b是陣列型別,而3是基本資料型別,兩個資料形式不一致
let [a,[b],c]=[1,3,8]
console.log(a); //1
console.log(b); //3
console.log(c); //8

(2)等號兩邊資料模式不一樣會報錯,但是等號兩邊資料數量可以不同。

//右側資料少,左右兩邊會根據順序進行匹配,c沒有資料與之匹配就是undefined
let [a,b,c]=[1,3]
console.log(a); //1
console.log(b); //3
console.log(c); //undefined

//左側資料少,已有的會被解構成功
let [a,b]=[1,3,9]
console.log(a); //1
console.log(b); //3

(3)等號右邊必須是可遍歷的,如果是不可遍歷的資料會報錯

let [a]=1
console.log(a); //1 is not iterable

(4)指定預設值,在解構賦值中允許指定預設值。當一個位置沒有值的時候,頁就是當模式相同,但是右邊沒有值的時候可以指定預設值。預設值只有是undefined才能生效,否則以右邊的值為準

let [a,b,c=3]=[1,2];
console.log(a); //1
console.log(b); //2
console.log(c); //3
  • 物件的解構賦值
    變數的解構賦值和陣列的解構賦值不太一樣:
    陣列的解構賦值:元素是按次序排列的,變數的取值由變數所處的位置決定
    物件的解構賦值:物件的屬性沒有次序,因此變數必須和屬性同名才能取到 正確的值
//從程式碼中可以看出來物件解構賦值的時候是和順序無關的,而屬性名字就顯得尤為重要。
let { foo, bar } = { bar: '我是bar', foo: '我是foo' }
console.log(foo); // 我是foo
console.log(bar); // 我是bar

變數名與屬性名不一致時賦值

let{a:b}={a:1}
console.log(b);//1
console.log(a);//a is not defind
//先找到同名屬性,在賦值給對應的變數,所以真正賦值的是後面的變數,也就是b,而不是前面的屬性名
  • 陣列是特殊的物件
    由於陣列是特殊的物件,所以陣列也支援物件屬性的解構賦值:
let arr = [1, 2, 3];
let { 0: first, 1: second, 2: last } = arr;
console.log(first); // 1
console.log(second); // 2
console.log(last); // 3
  • 字串的解構賦值
    字串在進行解構賦值的時候其實是被轉化成為了一個類陣列的物件。
let [a, b, c, d, e] = 'hello';
console.log(a); // h
console.log(b); // e
console.log(c); // l
console.log(d); // l
console.log(e); // o
//因為字串具有length這個屬性,因此我們還可以對該屬性進行解構賦值:
let { length: len } = 'hello';
console.log(len); // 5
  • 函式引數的解構賦值
    函式的引數也可以進行解構賦值,這是一個解構賦值運用比較多的場景,其實就是對之前所講的陣列、物件、布林值、數值解構賦值的一種實際使用:
let a={name:'小明',age:18}
    function wuKongYouLook({name,age}={}){
      console.log(name,age)
      }
      wuKongYouLook(a)//小明,18
      wuKongYouLook() //undefined,undefined
//同理,當let {name,age} =null或者undefined時,系統要報錯,但是這時它發現引數有預設值,於是就變成了let {name,age} = {},空物件是可能有name屬性的,那就沒錯,去找找看,沒有,那就返回undefind. 

參考文章:https://blog.csdn.net/caomage/article/details/84339041