簡體   English   中英

為什么在聲明這個javascript函數時參數中有花括號? (節點,model.js中的MongoDB)

[英]Why are there curly brackets in the parameters when declaring this javascript function? (Node, MongoDB in model.js)

我正在看別人正在運行的Javascript代碼。 在聲明函數時,為什么參數中有大括號? 例如:

function createUser({username, password, name, weight}, f) {};

這只是強制和重命名傳入對象中的鍵嗎? 這是在model.js中所以它可能與驗證有關嗎?

后續問題:當我嘗試在我的機器上編譯時,如何才能避免錯誤? 我在第一個奇怪的括號中得到“SyntaxError:Unexpected token {”。

這是ES6 解構任務

此語法聲明具有兩個參數的函數。

作為第一個參數傳遞的對象的usernamepasswordnameweight屬性的值將通過函數體中的變量usernamepasswordnameweight來獲得。

第二個參數將通過變量f

例如:

(function ({a,b}, c) {
  return [a,b,c];
})({a:1, b:2, d:"ignored"}, 3); // [1,2,3]

也許有人可以更好地回答這個問題,但有一個原因可能是JSON或對象文字,但即便如此,我認為它應該更像{abc:def,efg:hij,jkl:mln}(對於一個對象) literal - 其中def,hij等是字符串或字符串文字的變量名稱)或者這是JSON {“abc”:“def”,“efg”:“hij”,“jkl”:“mln”}

創建用戶https://docs.mongodb.org/v3.0/reference/method/db.createUser/的mongo文檔給出了一些示例。 請注意以逗號分隔的屬性:值對

use admin
db.createUser(
   {
     user: "appAdmin",
     pwd: "password",
     roles:
       [
         { role: "readWrite", db: "config" },
         "clusterAdmin"
       ]
   }
)

或者在這里,來自同一個鏈接,但是有JSON的例子和對象文字的例子。 請注意對象文字的值對和JSON的值對。

use products

db.createUser( { "user" : "accountAdmin01",
                 "pwd": "cleartext password",
                 "customData" : { employeeId: 12345 },
                 "roles" : [ { role: "clusterAdmin", db: "admin" },
                             { role: "readAnyDatabase", db: "admin" },
                             "readWrite"
                             ] },
               { w: "majority" , wtimeout: 5000 } )

編輯

Dmytro Shevchenko在與他的討論中提出了重要的一點,即在函數定義的形式參數中,即function abc(....) {}在...中你將永遠不會有JSON或對象文字或任何{ }。 您可以使用body傳入對象文字或JSON或函數,因此傳入的內容可能具有{},因此它們可以作為參數(實際參數)傳遞給函數。 但從來沒有他們永遠不會成為正式的參數。 所以你提到的代碼在多個級別上是錯誤的。{abc,def}作為對象文字是無效的,作為JSON無效,並且即使它被調整為有效的對象文字或有效的JSON,它也是無效的,它不應該在那里!

這是與Dmytro的聊天http://chat.stackoverflow.com/rooms/95661/discussion-between-barlop-and-dmytro-shevchenko

暫無
暫無

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

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