簡體   English   中英

es6 中函數參數列表中的大括號有什么作用?

[英]What do curly braces inside of function parameter lists do in es6?

我一直在我正在處理的代碼庫中看到類似這樣的函數:

const func = ({ param1, param2 }) => {
  //do stuff
}

這究竟是在做什么? 我很難在谷歌上找到它,因為我什至不確定這叫什么,或者如何在谷歌搜索中描述它。

它正在解構,但包含在參數中。 沒有解構的等價物是:

const func = o => {
    var param1 = o.param1;
    var param2 = o.param2;
    //do stuff
}

這是將對象作為屬性傳遞。

它基本上是簡寫

let param1 = someObject.param1
let param2 = someObject.param2

使用這種不帶參數的技術的另一種方法如下,讓我們考慮一下 someObject 確實包含這些屬性。

let {param1, param2} = someObject;

它是一個對象解構賦值。 像我一樣,您可能會感到驚訝,因為 ES6 對象解構語法看起來很像,但行為卻不像對象字面量構造。

它支持您遇到的非常簡潔的形式,以及重命名字段和默認參數:

本質上,它是 {oldkeyname:newkeyname=defaultvalue,...}。 ':' 不是鍵/值分隔符; '=' 是。

這種語言設計決定的一些后果是你可能不得不做一些事情

;({a,b}=some_object);

額外的括號防止左花括號被解析為塊,前導分號防止括號被解析為對前一行函數的函數調用。

有關更多信息,請參閱: https : //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment

請注意,對象解構賦值期間的關鍵錯誤不會拋出; 你最終會得到“未定義”的值,無論是關鍵錯誤還是其他一些被默默傳播為“未定義”的錯誤。

> var {rsienstr: foo, q: bar} = {p:1, q:undefined};
undefined
> foo
undefined
> bar
undefined
> 

暫無
暫無

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

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