SyntaxError:在严格模式下使用const

JavaScript Node.js

古一

2020-03-23

我正在使用node.js,并且在中使用的一个js文件const"strict mode"尝试运行它时,出现错误:

SyntaxError: Use of const in strict mode.

最佳做法是什么?

编辑:

'use strict'
const MAX_IMAGE_SIZE = 1024*1024; // 1 MB

第2582篇《SyntaxError:在严格模式下使用const》来自Winter(https://github.com/aiyld/aiyld.github.io)的站点

8个回答
小小飞云 2020.03.23

ECMAScript不支持const。因此,在指定严格模式后,您会收到语法错误。如果您希望代码与所有浏览器兼容,则需要使用var而不是const。我知道,这不是理想的解决方案,但这就是它的本质。有多种方法可以在JavaScript中创建只读属性(请参阅可以在Pure JavaScript中实现只读属性吗?),但我认为根据您的情况,它可能会显得过分杀伤。

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

浏览器兼容性

当前const的实现是Mozilla特定的扩展,不属于ECMAScript5。它在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声明的常量将是块作用域的。

宝儿 2020.03.23

使用的const严格模式下使用Chrome浏览器41.目前,发布Chrome浏览器测试版41已经释放,并支持它。

Mandy 2020.03.23

我最近也遇到过类似的问题,并最终获得了此问答。这不是OP所寻找的解决方案,但可能会帮助其他遇到类似问题的人。

我使用PM2运行项目,并且在给定的登台服务器中,我使用的是Node,NPM和PM2的旧版本。我更新了所有内容,但是仍然保持相同的错误:

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

我试图停止并多次启动该应用程序。还尝试再次更新所有内容。没事。直到我跑步时注意到警告pm2 start

>>>>内存PM2已过期,请执行:
>>>> $ pm2更新
内存PM2版本:0.15.10
本地PM2版本:3.2.9

知道了!运行之后pm2 update,我终于能够按预期运行该应用程序。不再有“在严格模式下常量”错误。

JinJin 2020.03.23

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

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

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

TonyJinJin泡芙 2020.03.23

这可能不是每个人的解决方案,但对我而言。

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

在使用本来很好的react-native时遇到了这个问题。只需使用nvm来使用正确版本的节点即可解决此问题。

梅Jim 2020.03.23

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

sudo ln -sf /usr/local/n/versions/node/6.0.0/bin/node /usr/bin/node  
十三StafanEva 2020.03.23

The const and let are part of ECMAScript 2015 (a.k.a. ES6 and Harmony), and was not enabled by default in Node.js 0.10 or 0.12. Since Node.js 4.x, “All shipping [ES2015] features, which V8 considers stable, are turned on by default on Node.js and do NOT require any kind of runtime flag.”. Node.js docs has an overview of what ES2015 features are enabled by default, and which who require a runtime flag. So by upgrading to Node.js 4.x or newer the error should disappear.

To enable some of the ECMAScript 2015 features (including const and let) in Node.js 0.10 and 0.12; start your node program with a harmony flag, otherwise you will get a syntax error. For example:

node --harmony app.js

It all depends on which side your strict js is located. I would recommend using strict mode with const declarations on your server side and start the server with the harmony flag. For the client side, you should use Babel or similar tool to convert ES2015 to ES5, since not all client browsers support the const declarations.

小卤蛋小胖 2020.03.23

如果在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指令

问题类别

JavaScript Ckeditor Python Webpack TypeScript Vue.js React.js ExpressJS KoaJS CSS Node.js HTML Django 单元测试 PHP Asp.net jQuery Bootstrap IOS Android