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

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

本文关键字:Node model MongoDB 中的 js 声明 javascript 函数 参数 为什么      更新时间:2023-09-26

我正在查看其他人正在运行的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}(对于对象文字-其中def,hij e.t.c.是字符串的变量名或字符串文字),或者对于JSON来说应该是这样{"abc":"def","efg":"hij","jkl":"mln&"}

创建用户的mongo文档https://docs.mongodb.org/v3.0/reference/method/db.createUser/举了一个例子。注意属性:用逗号分隔的值对

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或对象文字或任何{}。您可以传入对象文字、JSON或带正文的函数,因此传入的内容可能有{},因此它们可以作为参数(实际参数)传入函数。但它们永远不会成为正式的参数。所以你提到的代码在多个层面上都是错误的。。{abc,def}作为对象文字是无效的,作为JSON也是无效的,因为即使它被调整为有效的对象文字或有效的JSON,它也不应该存在!

这是和德米特罗的聊天https://chat.stackoverflow.com/rooms/95661/discussion-between-barlop-and-dmytro-shevchenko