我正在使用node.js,在我的一个js文件中,我在"strict mode"中使用const。当试图运行它时,我得到一个错误:
"strict mode"
const
SyntaxError: Use of const in strict mode.
这样做的最佳实践是什么?
编辑:
'use strict' const MAX_IMAGE_SIZE = 1024*1024; // 1 MB
ECMAScript不支持const。所以在你指定严格模式之后,你会得到语法错误。如果您希望代码与所有浏览器兼容,则需要使用var而不是const。我知道,这不是理想的解决方案,但事实就是这样。有一些方法可以在JavaScript中创建只读属性(参见在纯JavaScript中可以实现只读属性吗?),但我认为这可能是过度的,这取决于你的场景。
下面是来自中数的浏览器兼容性说明:
浏览器兼容性
const的当前实现是mozilla特定的扩展 并且不是ECMAScript 5的一部分。Firefox &铬 (V8)。在Safari 5.1.7和Opera 12.00中,如果您定义了一个变量 在这些浏览器中使用const,您仍然可以稍后更改它的值。它 Internet Explorer 6-10不支持,但包含在 Internet Explorer 11。const关键字当前声明 函数作用域中的常量(就像用var声明的变量一样) Firefox,至少从版本13开始,抛出TypeError如果您 重新声明一个常量。没有一个主要的浏览器产生任何通知 或者如果你给一个常数赋了另一个值会出错。返回值 这样的操作是指定的新值的操作,但是 重分配仅在Firefox和Chrome中不成功(至少 const将由ECMAScript 6定义,但使用不同的 语义。类似于用let语句声明的变量, 使用const声明的常量将被块作用域化
Firefox,至少从版本13开始,抛出TypeError如果您 重新声明一个常量。没有一个主要的浏览器产生任何通知 或者如果你给一个常数赋了另一个值会出错。返回值 这样的操作是指定的新值的操作,但是 重分配仅在Firefox和Chrome中不成功(至少
const将由ECMAScript 6定义,但使用不同的 语义。类似于用let语句声明的变量, 使用const声明的常量将被块作用域化
const和let是ECMAScript 2015(也就是ES6和Harmony)的一部分,在Node.js 0.10或0.12中默认没有启用。自从Node.js 4。V8认为稳定的所有发布[ES2015]特性在Node.js上默认是打开的,并且不需要任何类型的运行时标志。Node.js文档概述了ES2015默认启用的功能,以及哪些功能需要运行时标志。所以升级到Node.js 4。X或更新的错误应该消失。
let
在Node.js 0.10和0.12中启用一些ECMAScript 2015特性(包括const和let);使用和谐标志启动节点程序,否则将出现语法错误。例如:
node --harmony app.js
这完全取决于你的strict js位于哪一边。我建议在服务器端使用带有const声明的严格模式,并使用harmony标志启动服务器。对于客户端,你应该使用巴别塔或类似的工具将ES2015转换为ES5,因为不是所有的客户端浏览器都支持const声明。
自从提出这个问题以来,const关键字的草案已经成为ECMAScript 2015的一部分。还有当前版本的Node.js 支持const声明不带--harmony标志。
--harmony
以上所述,你现在可以用app.js运行node app.js:
app.js
node app.js
'use strict'; const MB = 1024 * 1024; ...
同时获得语法的好处和严格模式的好处。
如果这发生在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指令
这可能不是每个人的解决方案,但对我来说是。
如果您正在使用NVM,您可能没有为正在运行的代码启用正确的node版本。重新启动后,节点的默认版本变回系统默认版本。
在使用react-native工作时遇到了这个问题,它一直工作得很好。只需使用nvm使用正确的node版本来解决这个问题。
更新节点后的一个重要步骤是将节点二进制文件链接到最新安装的节点版本
sudo ln -sf /usr/local/n/versions/node/6.0.0/bin/node /usr/bin/node
通常,当执行代码所针对的节点的版本比预期的要旧时,就会发生此错误。(即0.12或更高)。
如果您正在使用NVM,请确保您使用的节点版本正确。你可以检查节点兼容性。绿色代表严格模式下的const
我在另一个帖子上发现了类似的问题,并发布了我的答案这里有详细说明
cd / npm install -g nave nave use 6.11.1 node app.js
我最近也遇到了类似的问题,并在这个问答中结束了。这不是OP寻找的解决方案,但可能会帮助其他有类似问题的人。
我使用PM2来运行一个项目,在给定的登台服务器上,我有一个非常旧的Node, NPM和PM2版本。我更新了所有内容,但是,我一直保持相同的错误:
SyntaxError:在严格模式下使用const。
我多次尝试停止和启动应用程序。也试着重新更新一切。毫无效果。直到我运行pm2 start时注意到一个警告:
pm2 start
< p > 在在在在内存中的PM2已过时,请执行以下操作: < br > 在在在在$ pm2更新 < br > 在内存中PM2版本:0.15.10 本地PM2版本:3.2.9
明白了!在运行pm2 update之后,我终于能够让应用程序按预期运行。不再有“严格模式下的const”错误。
pm2 update
我使用pm2来启动和维护节点进程。
从CLI来看,它工作得很好。
which node /usr/local/bin/node node -v v10.15.0
然而,我设置了一个cronjob,我得到了语法错误。
然后写一个cronjob来检查which node和node -v,令人惊讶的是,它是一个不同的路径和版本。
which node
node -v
which node /usr/bin/node node -v v0.10.48
为了修复cronjob,我必须为pm2使用--interpreter标志,如下所示:
--interpreter
pm2 start dist/server.js --interpreter=/usr/local/bin/node