簡體   English   中英

ES6功能后的方括號有什么作用?

[英]What do the square brackets after ES6 function do?

最近,我在尋找一種重寫丑陋的switch / case語句的方法,並遇到了這篇Medium文章

我將開關/盒重寫為如下的es6函數:

const url = category => ({
          'itemA': itemAService.getItemCategories(payload),
          'itemB': itemBService.getItemCategories(payload),
        })[category]

當我用const response = url(category);函數調用此函數時const response = url(category); 它有效,太好了! 但是后來我想知道[category]在函數末尾究竟意味着什么。 我以為這可能是立即調用的函數,但這似乎也不對。

文章提到這是一個對象文字,但是當我訪問MDN文檔時,找不到任何能解釋其含義或作用的內容,甚至找不到任何展示此內容的示例。

那怎么辦呢?

它不是在函數之后,而是函數主體中。 它也可以寫成:

  const url  = category => {
    const obj = {
      'itemA': itemAService.getItemCategories(payload),
      'itemB': itemBService.getItemCategories(payload),
    };

    return obj[category];
 };

因此,這基本上只是對象中的動態屬性查找。

該簡寫大致等於以下傳統函數語法:

function url(category) {
    var obj = {
      'itemA': itemAService.getItemCategories(payload),
      'itemB': itemBService.getItemCategories(payload),
    };
    return obj[category];
}

為對象創建命名變量時,更容易看到正在發生的事情。

箭頭函數中的對象周圍需要括號,因為如果箭頭函數以{開頭,它將被視為包含語句的主體,而不是要返回的值。

他們本來可以將[category]放在對象文字之后,而不是放在右括號之后,這可能會更加清楚。

大括號讓您感到困惑。

假設您有一個對象表達式,並且在指向該對象的變量上使用了一個屬性評估器。

obj = {foo: 1, bar: 2}
return obj["foo"];    //returns 1

現在,您將如何稱呼對象文字的屬性評估器? 您需要在它們周圍加上大括號以完成速記語法。

return {foo: 1, bar: 2}["foo"];    // WRONG Syntax
return ({foo: 1, bar: 2})["foo"];  // CORRECT syntax 

因此,可以使用以下傳統語法來重寫您的函數。

function getUrl(category) {

   return ({
          'itemA': itemAService.getItemCategories(payload),
          'itemB': itemBService.getItemCategories(payload),
        })[category]

}

暫無
暫無

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

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