【问题标题】:SyntaxError: Unexpected token '.'SyntaxError:意外的标记“。”
【发布时间】:2020-10-03 16:39:31
【问题描述】:

我已经使用 map 通过创建下面的代码来合并 2 个数组。

var result2 = data.map(k=>(
  stAttendance = attendance.find(p=>p.StudentName._id==k._id),
  ({...k, Present:stAttendance?.Present ?? 0, absent:stAttendance?.absent ?? 0, extra:stAttendance?.extra ?? 0})
));

console.log(result2);

当我在 HTML 页面的脚本标记中使用此代码时,它可以完美运行。 一旦我把它放在我的 Node JS router.get 函数中,它就会开始出现以下错误

  ({...k, Present:stAttendance?.Present ?? 0, absent:stAttendance?.absent ?? 0, extra:stAttendance?.extra ?? 0})
                                       ^

SyntaxError: Unexpected token '.'

有人知道我在这里做错了什么吗?

【问题讨论】:

  • 可能您正在运行的 node.js 版本在 Present:stAttendance?.Present 中还不支持 ?. 语法。
  • 你使用的是什么节点版本?
  • 我使用的是节点 12.13.0

标签: javascript node.js arrays express


【解决方案1】:

您可以使用以下代码替换现有代码以进行可选链接和无效合并。

var result2 = data.map(k=>(
  stAttendance = attendance.find(p=>p.StudentName._id==k._id) || {},
  ({...k, Present: stAttendance.Present || 0, absent: stAttendance.absent || 0, extra:stAttendance.extra || 0})
));

【讨论】:

  • 这段代码给了我一个错误 Untitled-7.html:22 Uncaught TypeError: Cannot read property 'Present' of undefined jsfiddle.net/creativated/qx0gbmzs 如果我从数据数组中删除第三个学生,那么它工作正常跨度>
  • 在小提琴中,我可以看到我提供的代码和正在尝试的代码存在细微差别。它被编码为attendance.find(p=>p.StudentName._id==k._id) 而它应该是attendance.find(p=>p.StudentName._id==k._id) || {}
【解决方案2】:

根据node.green,即使 node.js v14 还不支持可选链接 ?. 运算符。不过,当我自己测试 nodejs v14.4 时,它确实对我有用。

nullish coalescing operator ?? 类似。

MDN 似乎声称从 node.js 14.0 起两者都受支持,因此它们无法在您的 v12 中工作。

如果您的 nodejs 版本不支持它,您可以按照在这些新运算符之前的相同方式编写代码。只需将您的代码分解为多个步骤,然后检查条件语句是否正确存在属性。

【讨论】:

  • 哦,感谢您的链接,似乎没有 NodeJS 版本支持?运营商。我可以做些什么来替换我的代码?
  • @creativated - 甚至 MDN 都说它需要节点 v14。我刚刚在我的笔记本电脑上安装了 node v14.4,可选的链接运算符 ?. 对我有用。
猜你喜欢
  • 2020-09-28
  • 2018-08-02
  • 2022-01-26
  • 1970-01-01
  • 2022-12-13
  • 1970-01-01
  • 2016-04-21
  • 2020-12-03
  • 2022-11-28
相关资源
最近更新 更多