鍍金池/ 問答/HTML/ ES6-函數(shù)解構(gòu)

ES6-函數(shù)解構(gòu)

clipboard.png

函數(shù)的解構(gòu)沒太懂這個里面紅箭頭那些地方,1.為什么會是undefined呢?不是 let {x,y}={x:0,y:1}的時候,x可以輸出等于0,y=1嗎,雖然x,y是模式,賦值是賦給x,y變量,那這里為什么不是[0,0]呢?

2.還有阮老師說默認(rèn)值只有當(dāng)?shù)扔趗ndefined的時候才起作用,那let {x:1,y:2}={};x會等于1,y會等于2,是不是因為右邊沒有設(shè)定x,y屬性,所以在右邊找不到x,y所以兩個都undefined,x才等于1,y等于2?是這么理解的嗎

回答
編輯回答
笨小蛋

你可以從結(jié)構(gòu)時的等號來看:

function move({x, y} = { x: 0, y: 0}) {...}

這里等號左邊的部分會被看作一個整體來賦默認(rèn)值,在題中第二個 move 里就是他的唯一一個輸入值。
如果有輸入,則對這個輸入值進(jìn)行結(jié)構(gòu),如果沒有輸入,則使用默認(rèn)值。

可以注意到的是前面的 move 里有三個等號,后面 move 只有一個等號

2018年9月12日 05:16
編輯回答
絯孑氣

我今天剛好看到這塊,第一個函數(shù)包含了函數(shù)參數(shù)默認(rèn)值和對象解構(gòu)默認(rèn)值,而第二個函數(shù)僅僅是函數(shù)參數(shù)默認(rèn)值。

2018年3月1日 16:59
編輯回答
無標(biāo)題

樓上已經(jīng)回答你了,這是賦默認(rèn)值一種方式,建議通讀ES6 文檔

2017年3月5日 02:51
編輯回答
久不遇

move({x: 3}),這里的 {x: 3} 對象的 yundefined,
所以結(jié)果是 [3, undefined]

注意第二種 move 和 第一個 move 的區(qū)別,
第一個 move 中:

function move({x = 0, y = 0} = {}) {
  return [x, y];
}
// 等價于
function move(a) {
  if (a === undefined) {
    a = {}
  }

  let x = a.x
  if (x === undefined) {
    x = 0
  }
  let y = a.y
  if (y === undefined) {
    y = 0
  }

  return [x, y]
}

而第二個 move 相當(dāng)于:

function move(a = {x: 0, y: 0}) {
  return [a.x, a.y];
}

// 等價于
function move(a) {
  if (a === undefined) {
    a = {x: 0, y: 0}
  }

  // 此處沒有為 a.x 和 a.y 設(shè)置默認(rèn)值的過程
  return [a.x, a.y];
}

也就是當(dāng) a 為 undefined 時,a 取默認(rèn)值 {x: 0, y: 0}.

2018年2月22日 13:42