SyntaxError:在严格模式下使用const
我正在使用node.js,并在我的一个js文件中使用const
在"strict mode"
。 当试图运行它,我得到一个错误:
SyntaxError: Use of const in strict mode.
最好的做法是什么?
编辑:
'use strict' const MAX_IMAGE_SIZE = 1024*1024; // 1 MB
const
和let
是ECMAScript 2015(又名ES6和Harmony)的一部分,在Node.js 0.10或0.12中默认没有启用。 由于Node.js 4.x,“V8认为稳定的所有发货[ES2015]function在Node.js上默认打开,并且不需要任何种类的运行时间标志”。 Node.js文档概述了默认情况下启用了哪些ES2015function,以及哪些需要运行时标志 。 所以通过升级到Node.js 4.x或更新的错误应该消失。
在Node.js 0.10和0.12中启用一些ECMAScript 2015function(包括const
和let
); 用一个和谐标志启动你的节点程序,否则你会得到一个语法错误。 例如:
node --harmony app.js
这一切都取决于你严格的js位于哪一方。 我build议在服务器端使用const
声明的严格模式,并使用和谐标志启动服务器。 对于客户端来说,应该使用Babel或类似的工具将ES2015转换成ES5,因为并不是所有的客户端浏览器都支持const
声明。
如果在nodejs中发生这种情况,则是由于旧版本的nodejs。 通过使用更新节点,
1)清除NPM的caching:
sudo npm cache clean -f
2)安装一个名叫'n'的小助手
sudo npm install -gn
3)安装最新稳定的NodeJS版本
sudo n stable
更新取自https://stackoverflow.com/a/19584407/698072的; nodejs指令
更新节点之后的一个重要步骤是将节点二进制文件链接到最新安装的节点版本
sudo ln -sf /usr/local/n/versions/node/6.0.0/bin/node /usr/bin/node
这可能不是每个人的解决scheme,但它是为我。
如果您使用的是NVM,则可能没有为正在运行的代码启用正确版本的节点。 重新启动后,节点的默认版本将变回系统默认值。
遇到反应,本来工作正常的时候遇到了这个问题。 只要使用nvm来使用正确版本的节点来解决这个问题。
自问题提出之时起, const
关键字的草案已经成为ECMAScript 2015的一部分。 另外当前版本的Node.js 支持不带--harmony
标志的const声明 。
有了上述说明,现在可以使用app.js
运行node app.js
app.js
:
'use strict'; const MB = 1024 * 1024; ...
获得语法糖和严格模式的好处。
通常,当执行代码的节点版本比预期的要旧时,会发生此错误。 (即0.12以上)。
如果您使用的是nvm,请确保您使用正确版本的节点。 您可以在严格模式下检查node.green上const的兼容性
我在另一篇文章中发现了一个类似的问题,并在那里详细地公布了我的答案
ECMAScript不支持const。 所以在你指定严格模式之后,你会得到语法错误。 如果您希望代码与所有浏览器兼容,则需要使用var而不是const。 我知道,不是理想的解决scheme,但它是。 有什么方法可以在JavaScript中创build只读属性(请参阅可以在纯JavaScript中实现只读属性? ),但是我认为这可能是矫枉过正,取决于您的scheme。
以下是来自MDN的浏览器兼容性说明:
浏览器兼容性
const的当前实现是Mozilla特定的扩展,不是ECMAScript 5的一部分。它在Firefox和Chrome(V8)中受支持。 从Safari 5.1.7和Opera 12.00开始,如果在这些浏览器中使用const定义一个variables,您仍然可以稍后更改它的值。 它在Internet Explorer 6-10中不受支持,但是包含在Internet Explorer 11中。当前,const关键字在函数作用域中声明了常量(如使用var声明的variables)。
Firefox,至less从版本13开始,如果你重新声明一个常量,则会引发TypeError。 如果您将另一个值赋给常量,主要浏览器都不会产生任何通知或错误。 这种操作的返回值是分配的新值,但只有在Firefox和Chrome(至less从版本20开始)重新分配才是成功的。
const将被ECMAScript 6定义,但是具有不同的语义。 类似于用let语句声明的variables,用const声明的常量将是块范围的。
Chrome 41的发布使用了严格模式下的const
。目前, Chrome 41 Beta已经发布并支持它。
cd / npm install -g nave nave use 6.11.1 node app.js