SyntaxError:在严格模式下使用const

问题描述 投票:233回答:10

我正在使用node.js,在我的一个js文件中,我在const中使用"strict mode"。当试图运行它时,我收到一个错误:

SyntaxError: Use of const in strict mode.

这样做的最佳做法是什么?

编辑:

'use strict'
const MAX_IMAGE_SIZE = 1024*1024; // 1 MB
javascript node.js
10个回答
278
投票

constlet是ECMAScript 2015(a.k.a. ES6和Harmony)的一部分,默认情况下未在Node.js 0.10或0.12中启用。从Node.js 4.x开始,“所有出货[ES2015]功能,V8认为稳定,默认情况下在Node.js上打开,不需要任何类型的运行时标志。” Node.js docs has an overview of what ES2015 features are enabled by default, and which who require a runtime flag。因此,通过升级到Node.js 4.x或更新版本,错误应该消失。

在Node.js 0.10和0.12中启用一些ECMAScript 2015功能(包括constlet);使用和声标志启动节点程序,否则会出现语法错误。例如:

node --harmony app.js

这完全取决于您的严格js所在的一侧。我建议在服务器端使用带有const声明的严格模式,并使用和声标志启动服务器。对于客户端,您应该使用Babel或类似工具将ES2015转换为ES5,因为并非所有客户端浏览器都支持const声明。


-4
投票
cd /
npm install -g nave
nave use 6.11.1
node app.js

231
投票

如果在nodejs中发生这种情况,则归因于较旧版本的nodejs。使用更新节点,

1)清除NPM的缓存:

sudo npm cache clean -f

2)安装一个名为'n'的小帮手

sudo npm install -g n

3)安装最新的稳定NodeJS版本

sudo n stable

更新来自https://stackoverflow.com/a/19584407/698072的nodejs指令


22
投票

通常,当执行代码的节点版本比预期的更旧时会发生此错误。 (即0.12或更早)。

如果您使用的是nvm,请确保您使用的节点版本正确。你可以查看compatibility on node.green for const under strict mode

我在另一篇文章中发现了类似的问题并发布了我的答案there in detail


20
投票

更新节点后的一个重要步骤是将节点二进制文件链接到最新安装的节点版本

sudo ln -sf /usr/local/n/versions/node/6.0.0/bin/node /usr/bin/node  

14
投票

这可能不是每个人的解决方案,但它适合我。

如果您使用的是NVM,则可能没有为正在运行的代码启用正确版本的节点。重新启动后,您的默认节点版本将更改回系统默认值。

在使用一直运行良好的反应原生物时遇到这种情况。只需使用nvm即可使用正确版本的节点来解决此问题。


8
投票

自提出问题以来,const关键字的草案已经成为ECMAScript 2015的生活标准。当前版本的Node.js supports const declarations没有--harmony标志。

通过上面说的你现在可以用node app.js运行app.js

'use strict';
const MB = 1024 * 1024;
...

获得语法糖和严格模式的好处。


0
投票

我最近遇到了类似的问题,并最终在此问答中结束。这不是OP正在寻找的解决方案,但可能会帮助处理类似问题的其他人。

我正在使用PM2来运行一个项目,在给定的临时服务器中,我有一个非常旧版本的Node,NPM和PM2。我更新了所有内容,但是,我一直保持相同的错误:

SyntaxError:在严格模式下使用const。

我试图多次停止并启动应用程序。还尝试再次更新所有内容。没有任何效果。直到我在运行pm2 start时发现警告:

>>>>内存中的PM2已过时,请执行以下操作: >>>> $ pm2更新 在内存中PM2版本:0.15.10 本地PM2版本:3.2.9

疑难杂症!运行pm2 update之后,我终于能够按预期运行应用程序了。没有“const in strict mode”错误了。


-1
投票

ECMAScript不支持const。因此,在指定严格模式后,会出现语法错误。如果希望代码与所有浏览器兼容,则需要使用var而不是const。我知道,不是理想的解决方案,但它就是它的本质。有一些方法可以在JavaScript中创建只读属性(请参阅Can Read-Only Properties be Implemented in Pure JavaScript?),但我认为根据您的方案,它可能有点过分。

以下是MDN的浏览器兼容性说明:

浏览器兼容性

const的当前实现是特定于Mozilla的扩展,不是ECMAScript 5的一部分。它在Firefox和Chrome(V8)中受支持。从Safari 5.1.7和Opera 12.00开始,如果在这些浏览器中使用const定义变量,您仍可以在以后更改其值。它在Internet Explorer 6-10中不受支持,但包含在Internet Explorer 11中.const关键字当前在函数作用域中声明了常量(就像用var声明的变量一样)。

Firefox,至少从版本13开始,如果你重新声明一个常量,就会抛出一个TypeError。如果为常量指定另一个值,则所有主流浏览器都不会产生任何通知或错误。此类操作的返回值是指定的新值,但重新分配仅在Firefox和Chrome中失败(至少从版本20开始)。

const将由ECMAScript 6定义,但具有不同的语义。与使用let语句声明的变量类似,使用const声明的常量将是块作用域的。


-2
投票

随着Chrome 41的发布,可以在严格模式下使用const。目前,Chrome 41 Beta is already released支持它。

热门问题
推荐问题
最新问题