得到意外token,求解释
Posted
技术标签:
【中文标题】得到意外token,求解释【英文标题】:Get unexpected token, looking for explanation 【发布时间】:2019-08-31 08:58:57 【问题描述】:可能会在不同的频道上问这个问题。我有这个:
const reduceList = (list) =>
return list.filter(Boolean).reduce((a, b, c) =>
console.log(this);
);
;
console.log(reduceList([1, 2, 3]));
我明白了:
console.log(this); ^
SyntaxError: Unexpected token 在新脚本 (vm.js:74:7) 在 createScript (vm.js:246:10) 在 Object.runInThisContext (vm.js:298:10) 在 Module._compile (internal/modules/cjs/loader.js:657:28) 在 Object.Module._extensions..js (internal/modules/cjs/loader.js:700:10) 在 Module.load (internal/modules/cjs/loader.js:599:32) 在 tryModuleLoad (internal/modules/cjs/loader.js:538:12) 在 Function.Module._load (internal/modules/cjs/loader.js:530:3) 在 Function.Module.runMain (internal/modules/cjs/loader.js:742:12) 启动时(内部/bootstrap/node.js:266:19)
有人知道这是为什么吗?我使用的是 Node.js 版本 11。
【问题讨论】:
这真的很有趣,因为保留字可以是对象属性名称。 【参考方案1】:速记对象初始化语法需要一个标识符。虽然this
(和其他保留字)在技术上是一个 IdentifierName,但它不能用作 ECMAScript 规范中解释的 Identifier。
保留字是 IdentifierName,不能用作 Identifier。
https://www.ecma-international.org/ecma-262/6.0/#sec-reserved-words
所以这不仅限于this
关键字,使用其他保留字也会产生类似的语法错误:
true // syntax error
true: true // valid object literal
基本上,您需要使用命名标识符(变量)才能在此处正常工作。可以使用保留字作为属性名称,但不能作为 标识符,因为它们的评估方式不同。
【讨论】:
速记对象初始化器spec 供参考。以上是关于得到意外token,求解释的主要内容,如果未能解决你的问题,请参考以下文章