Как стать автором
Обновить

Комментарии 13

Например, попытка выполнения следующего кода приведёт к выдаче исключения ReferenceError:
'use strict';
badVariable = 1;

Только если эта переменная не объявлена в "родительских" областях видимости.

Строгий режим запрещает назначать объекту свойства с одинаковыми именами


Начиная с ECMAScript 2015, синтаксическая ошибка в коде
'use strict';
var o = { a: 1, a: 2 };
не возникает. В MDN об этом упоминается. Только непонятно почему так сделали. Кто-нибудь знает?

Рискну предположить что для такого случая:


const o = { ...a, a: 2 }; // where a = { a: 1 }

чтобы в этом случае не выкидывало ошибку.

Нет, это же не из той оперы. А вообще, spread оператор обычно транспилируется (и рискну предположить, что роботает) через Object.assign, который уже не имеет никакого отношения к синтаксису.

Отчего же? Консистентность языковых конструкций достаточно важна. Если используя spread можно задать два одинаковых ключа, а без него нельзя — то это нехорошо. Хотя версия с JSON вероятнее :-)

С одной стороны да, но с другой, было бы очень странно если бы spread оператор давал ошибку когда есть два одинаковых ключа даже если бы в литерале объекта это было бы ошибкой.

Согласен, но где-то сам видел, как какой-то транспилятор (вроде TypeScript) превратил spread в Object.assign.

Скорее всего, для совместимости с JSON. В нем тоже присутствует такая же фича.

И это не очень-то хорошо. У нас недавно из-за этого была ошибка, отнявшая много времени.

По поводу отлавливания ошибок – это лучше к Typescript.


Там не только дубликаты статических ключей отлавливаются, но и динамических: демо

JSON — это не только Javascript. Наша ошибка была в PL.
а можно ли включить для функции или скрипта «sloppy mode»? Например: в хроме для одноразовой задачки (нахождения оптимального решения) прямо в консоли разработчика понадобилось использовать eval внутри setTimeout и… хром не разрешает так делать
Зарегистрируйтесь на Хабре, чтобы оставить комментарий