我在看别人正常运行的Javascript代码。在声明函数时,为什么参数中有大括号?例如:
function createUser({username, password, name, weight}, f) {};
这只是强制和重命名传入对象中的键吗?这是在model.js中所以它可能与验证有关吗?
后续问题:当我尝试在我的机器上编译时,如何才能避免错误?我在第一个奇怪的括号中得到“SyntaxError:Unexpected token {”。
答案 0 :(得分:4)
这是ES6 destructuring assignment。
此语法声明了一个带有两个参数的函数。
通过变量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]
答案 1 :(得分:0)
也许有人可以更好地回答这个问题,但{}可能有JSON或对象文字的一个原因,但即便如此,我认为它应该更像{abc:def,efg:hij,jkl:mln}(对于对象文字 - 其中def,hij等是字符串或字符串文字的变量名称)或这对于JSON {“abc”:“def”,“efg”:“hij”,“jkl”:“mln”}
create user 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
的聊天