SyntaxError: использование константы в строгом режиме

Я работаю с node.js, и в одном из моих js файлов я использую const в "strict mode". При попытке запустить его я получаю сообщение об ошибке:

SyntaxError: Use of const in strict mode.

Какова наилучшая практика для этого?

Edit:

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

Ответ 1

const и let являются частью ECMAScript 2015 (a.k.a. ES6 и Harmony) и по умолчанию не были включены в Node.js 0.10 или 0.12. Поскольку Node.js 4.x, "Все функции доставки [ES2015], которые V8 считает стабильными, включаются по умолчанию на Node.js и НЕ требуют какого-либо флага времени выполнения". Node.js docs имеет представление о том, какие функции ES2015 включены по умолчанию и кому требуется флаг времени выполнения. Поэтому, обновив до Node.js 4.x или новее, ошибка должна исчезнуть.

Чтобы включить некоторые функции ECMAScript 2015 (включая const и let) в Node.js 0.10 и 0.12; запустите программу node с флагом гармонии, иначе вы получите синтаксическую ошибку. Например:

node --harmony app.js

Все зависит от того, на какой стороне находится ваш строгий js. Я бы рекомендовал использовать строгий режим с объявлениями const на вашей стороне сервера и запустить сервер с флагом гармонии. Для клиентской стороны вы должны использовать Babel или аналогичный инструмент для преобразования ES2015 в ES5, поскольку не все клиентские браузеры поддерживают объявления const.

Ответ 2

Если это происходит в nodejs, это связано с более старой версией nodejs. Обновите node, используя

1) Очистить кеш-память NPM:

sudo npm cache clean -f

2) Установите небольшой помощник под названием 'n'

sudo npm install -g n

3) Установите последнюю стабильную версию NodeJS

sudo n stable

Обновить команды nodejs, взятые из fooobar.com/questions/16101/...

Ответ 3

Одним из важных шагов после обновления вашего node является привязка вашего двоичного файла node к последней установленной версии node

sudo ln -sf /usr/local/n/versions/node/6.0.0/bin/node /usr/bin/node  

Ответ 4

Это, вероятно, не решение для всех, но это было для меня.

Если вы используете NVM, возможно, вы не включили правильную версию node для кода, который вы используете. После перезагрузки версия по умолчанию node изменится на стандартную систему.

Забежал на это, работая с реагирующей-родной, которая работала нормально. Просто используйте nvm для использования правильной версии node для решения этой проблемы.

Ответ 5

Обычно эта ошибка возникает, когда версия node, против которой выполняется код, старше ожидаемого. (то есть 0,12 или старше).

если вы используете nvm, пожалуйста, убедитесь, что вы используете правильную версию node. Вы можете проверить совместимость на node.green для константы в строгом режиме

Я нашел аналогичную проблему в другом посте и подробно разместил свой ответ

Ответ 6

С момента запроса вопроса проект для ключевого слова const уже является жизненным стандартом как часть ECMAScript 2015. Также текущая версия Node.js поддерживает объявления const без флага --harmony.

С помощью сказанного выше вы можете запустить node app.js с помощью app.js:

'use strict';
const MB = 1024 * 1024;
...

получить как синтаксический сахар, так и преимущества строгого режима.

Ответ 7

const не поддерживается ECMAScript. Поэтому после того, как вы укажете строгий режим, вы получите синтаксическую ошибку. Вам нужно использовать var вместо const, если вы хотите, чтобы ваш код был совместим со всеми браузерами. Я знаю, а не идеальное решение, но это то, что есть. Есть способы создания свойств только для чтения в JavaScript (см. Могут ли свойства только для чтения быть реализованы в Pure JavaScript?), но я думаю, что это может быть перебор в зависимости от вашего сценария.

Ниже приведено примечание о совместимости браузера от MDN:

Совместимость с браузером

Текущая реализация const - это расширение, зависящее от Mozilla и не является частью ECMAScript 5. Он поддерживается в Firefox и Chrome (V8). Начиная с Safari 5.1.7 и Opera 12.00, если вы определяете переменную с константой в этих браузерах, вы все равно можете изменить ее значение позже. Это не поддерживается в Internet Explorer 6-10, но включен в Internet Explorer 11. Ключевое слово const объявляет константа в области видимости функции (как переменные, объявленные с помощью var).

Firefox, по крайней мере с версии 13, бросает TypeError, если вы redeclare константа. Ни один из основных браузеров не производит никаких уведомлений или ошибки, если вы назначаете другое значение константе. Возвращаемое значение такой операции соответствует назначению нового значения, но переназначение не увенчалось успехом только в Firefox и Chrome (по крайней мере начиная с версии 20).

const будет определяться ECMAScript 6, но с разными семантика. Подобно переменным, объявленным с помощью оператора let, константы, объявленные с помощью константы, будут областями с блочной областью.

Ответ 8

Использование const в строгом режиме доступно с выпуском Chrome 41. В настоящее время Chrome 41 Beta уже выпущен и поддерживает его.

Ответ 9

cd /
npm install -g nave
nave use 6.11.1
node app.js