簡體   English   中英

對象解構語法-ES6

[英]Object destructuring syntax - ES6

我經歷過數組解構語法,這是眾所周知的。

當我們說var {p, q} = o;時,我們在下面到底在做什么?

var {p, q} pq是否不同於o屬性,即'p''q' 如是,

為什么var {a, b} = o; 不起作用?

> var o = {p: 42, q: true};
    undefined
> p
    ReferenceError: p is not defined
> q
    ReferenceError: q is not defined
> o['p']
    42
> o['q']
    true
> var {p, q} = o;
    undefined
> p
    42
> q
    true
> var {a, b} = o;
    undefined
> a
    undefined
> b
    undefined

*注意:我了解到,字典鍵是javascript中的字符串文字 。*

這是因為使用您的語法進行對象分解時{a, b} LHS表達式( {a, b} )中使用的名稱用作RHS表達式( o )的鍵。 由於ab不是o屬性,因此將失敗(返回undefined )。

規范中的相關部分在“ 運行時語義: AssignmentProperty下的DestructingAssignmentEvaluation :IdentifierReference初始化程序 (倒數第二)”中。 AssignmentProperty是您的a (和b ...分別)和。 的的StringValue a'a'和用於作為密鑰來獲取從值o (相當於o['a']在這種情況下)。

如果您願意,它將起作用:

var {p:a, q:b} = o;

使用AssignmentProperty:PropertyName:AssignmentElement (最后一個條目),它使用屬性名稱( p )和分配元素( a )。

    var o = {p: 42, q: true};
     var {p, q} = o;

在這里, var {p,q} = o只是var {p:p , q:q} = o的簡寫

考慮一下。

      var o = { key : "value" };
      var { key : local_var } = o ;
      local_var === o["key"] // true

如果省略local_var,則寫var {key} = o; 將使用標識符“ key”創建一個新的變量鍵,就像執行var key = o["key"]

所以在您的示例中,就像

      var p =  o["p"] ;  //42
       var q = o["q"];   //true
       var a = o["a"];  // undefined
       var b = o["b"];   //undefined

這可能並不完全正確,但應該可以幫助您理解。
類似於其他語言提供的模式匹配,但這是不同的。

暫無
暫無

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

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