我正在使用node.js,在我的一个js文件中,我在“严格模式”下使用const。当试图运行它时,我得到一个错误:
SyntaxError: Use of const in strict mode.
这样做的最佳实践是什么?
编辑:
'use strict'
const MAX_IMAGE_SIZE = 1024*1024; // 1 MB
我正在使用node.js,在我的一个js文件中,我在“严格模式”下使用const。当试图运行它时,我得到一个错误:
SyntaxError: Use of const in strict mode.
这样做的最佳实践是什么?
编辑:
'use strict'
const MAX_IMAGE_SIZE = 1024*1024; // 1 MB
当前回答
ECMAScript不支持const。所以在你指定严格模式之后,你会得到语法错误。如果您希望代码与所有浏览器兼容,则需要使用var而不是const。我知道,这不是理想的解决方案,但事实就是这样。有很多方法可以在JavaScript中创建只读属性(参见纯JavaScript中可以实现只读属性吗?),但我认为这可能是过度的,这取决于你的场景。
下面是MDN的浏览器兼容性说明:
浏览器兼容性
The current implementation of const is a Mozilla-specific extension and is not part of ECMAScript 5. It is supported in Firefox & Chrome (V8). As of Safari 5.1.7 and Opera 12.00, if you define a variable with const in these browsers, you can still change its value later. It is not supported in Internet Explorer 6-10, but is included in Internet Explorer 11. The const keyword currently declares the constant in the function scope (like variables declared with var). Firefox, at least since version 13, throws a TypeError if you redeclare a constant. None of the major browsers produce any notices or errors if you assign another value to a constant. The return value of such an operation is that of the new value assigned, but the reassignment is unsuccessful only in Firefox and Chrome (at least since version 20). const is going to be defined by ECMAScript 6, but with different semantics. Similar to variables declared with the let statement, constants declared with const will be block-scoped.
其他回答
自从提出这个问题以来,const关键字的草案已经成为ECMAScript 2015的一部分。此外,当前版本的Node.js支持不带——harmony标志的const声明。
以上所述,你现在可以运行节点app.js,使用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指令
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或更新的错误应该消失。
为了在Node.js 0.10和0.12中启用一些ECMAScript 2015特性(包括const和let);使用和谐标志启动节点程序,否则将出现语法错误。例如:
node --harmony app.js
这完全取决于你的strict js位于哪一边。我建议在服务器端使用带有const声明的严格模式,并使用harmony标志启动服务器。对于客户端,您应该使用Babel或类似的工具将ES2015转换为ES5,因为不是所有的客户端浏览器都支持const声明。
cd /
npm install -g nave
nave use 6.11.1
node app.js
在严格模式下使用const随Chrome 41发布。 目前,Chrome 41 Beta已经发布并支持它。