为什么在声明这个javascript函数时参数中有花括号? (节点,model.js中的MongoDB)

时间:2015-11-20 07:59:51

标签: javascript node.js mongodb

我在看别人正常运行的Javascript代码。在声明函数时,为什么参数中有大括号?例如:

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

这只是强制和重命名传入对象中的键吗?这是在model.js中所以它可能与验证有关吗?

后续问题:当我尝试在我的机器上编译时,如何才能避免错误?我在第一个奇怪的括号中得到“SyntaxError:Unexpected token {”。

2 个答案:

答案 0 :(得分:4)

这是ES6 destructuring assignment

此语法声明了一个带有两个参数的函数。

通过变量username可以获得作为第一个参数传递的对象的passwordnameweightusername属性的值,passwordnameweight在函数体中。

第二个参数将通过变量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

的聊天