SyntaxError:在严格模式下使用const

Viv*_*k P 238 javascript node.js

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

SyntaxError: Use of const in strict mode.
Run Code Online (Sandbox Code Playgroud)

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

编辑:

'use strict'
const MAX_IMAGE_SIZE = 1024*1024; // 1 MB
Run Code Online (Sandbox Code Playgroud)

Ale*_*der 279

constlet是2015年的ECMAScript(又名ES6与和谐)的一部分,默认情况下在Node.js的0.10或0.12没有启用.从Node.js 4.x开始,"所有出货[ES2015]功能,V8认为稳定,默认情况下在Node.js上打开,不需要任何类型的运行时标志." Node.js文档概述了默认情况下启用的ES2015功能,以及需要运行时标志的功能.因此,通过升级到Node.js 4.x或更新版本,错误应该消失.

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

node --harmony app.js
Run Code Online (Sandbox Code Playgroud)

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

  • 这是最完整和最相关的答案. (8认同)
  • 我想建议不要使用"use_strict"标志.它在解释器中运行别人的代码而不是为其编写的.总是使用'​​'use strict';`你自己,但让第三方代码自行决定. (7认同)

Str*_*ger 234

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

1)清除NPM的缓存:

sudo npm cache clean -f
Run Code Online (Sandbox Code Playgroud)

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

sudo npm install -g n
Run Code Online (Sandbox Code Playgroud)

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

sudo n stable
Run Code Online (Sandbox Code Playgroud)

更新来自/sf/answers/1370908521/的 nodejs指令

  • 我得到了这个"npm ERR!notsup不支持的npm ERR!notsup与您的操作系统或架构不兼容:n@2.1.4",同时尝试执行第2步.好时光. (3认同)

小智 22

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

如果您使用的是nvm,请确保您使用的节点版本正确.您可以在严格模式下检查node.green上的const兼容性

我在另一篇文章中发现了类似的问题,并在那里详细发布了我的答案


Shr*_*nde 20

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

sudo ln -sf /usr/local/n/versions/node/6.0.0/bin/node /usr/bin/node  
Run Code Online (Sandbox Code Playgroud)


boa*_*der 15

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

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

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

  • 以及用于说明上述"解决方案"的任何代码? (2认同)

小智 8

自提出问题以来,const关键字的草案已经成为ECMAScript 2015的一部分.此外,当前版本的Node.js 支持不带--harmony标志的const声明.

有了上述说法,你现在可以运行node app.jsapp.js:

'use strict';
const MB = 1024 * 1024;
...
Run Code Online (Sandbox Code Playgroud)

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


Shi*_*hah -4

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 声明的常量将是块作用域的。

  • **浏览兼容性**不用担心...这是_Node.js_ (21认同)
  • ECMAScript 6 支持 `const` 并且得到广泛支持:http://kangax.github.io/compat-table/es6/#const 但是你的答案是对的 - `'use strict';` 和 ` const` 不混合。 (3认同)