簡體   English   中英

了解彎括號“ {}”的上下文

[英]Understanding the Context of Curly Brackets '{}'

我一直在審查其他人的代碼,而總體而言,ES2015可以得到一些利用,但是,我一直沉迷於Destructuring。

以前,在Javascript中,“花括號” {}用於塊或對象。 例如

// Curly Brackets Block
If () {
  ...
}

// Curly Brackets in Obj
var obj = {
  a : 1,
  ...
}

但是,在解構中,我們一次又一次看到以下語法:

let a = ({ a, b }) => {
}

我的問題是,參數容器是實際對象還是僅僅是塊? 請說明以下內容是否與上面的代碼相同:

let a = ( a, b ) => {
}

編輯:從閱讀Axel Rauschmayers關於破壞的文章(到目前為止)我的理解是,我們只是在繪制道具。 總是變成新的Obj? 即:

let a = { first : a, second : b } = AnObj;
===
a.a === AnObj.first;
a.b === AnObj.second;

以上正確嗎? obj總是實例化嗎? 但是,這與上面的函數沒有任何意義,因此為道具創建的對象將是一個匿名對象,對嗎?

非常感謝,

不,解構過程中的花括號不會形成塊或對象文字。

它們絕對不是一個塊,因為它們不是語句(並且不包含語句列表),它們是類似於對象文字的表達式。 實際上,它們甚至具有與對象文字相同的語法,唯一的區別是它們位於分配目標(分配運算符的左側)或函數參數的位置。

let a = ({ a, b }) => {…}let a = ( a, b ) => {…}嗎?

不,真的不是。 兩個參數列表的確聲明了函數作用域的變量ab ,但是第一個函數期望一個對象具有.a.b屬性,而第二個函數期望兩個參數。

我的理解是,我們只是將屬性映射到新的obj?

否。沒有創建/實例化新對象。 只有您傳入的對象(右側)。 然后將其解構 (“拉開”)成塊,然后分配給各個子目標(變量,屬性引用)。

來寫

a.b = anObj.first;
a.c = anObj.second;

與您要使用的解構任務

({first: a.b, second: a.c}) = anObj;

(括號是區分表達式與塊所必需的)。

但是,更常見的用例是變量初始化。 你可以縮短

let b = anObj.first,
    c = anObj.second;

let {first: b, second: c} = anObj;

當變量與屬性具有相同的名稱時,還有一個簡寫形式

let first = anObj.first,
    second = anObj.second;

相當於

let {first, second} = anObj;

let a = { first : a, second : b } = anObj; 正確?

不,那沒有多大意義。 它會去糖

let a;
a = anObj.first;
b = anObj.second;
a = anObj;

它用於銷毀:

var obj = {a: 1, b: 2},
    add = ({a, b}) => a + b;

console.log(add(obj));  //3

因此,基本上在函數內部的語句中會出現兩個參數,但是調用它時,只會傳遞一個對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM