[英]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 解構任務 。
此語法聲明具有兩個參數的函數。
作為第一個參數傳遞的對象的username
, password
, name
和weight
屬性的值將通過函數體中的變量username
, password
, name
和weight
來獲得。
第二個參數將通過變量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.