Повторное использование зарезервированных слов в качестве имен свойств

Может ли зарезервированное слово использоваться в качестве имени свойства объекта?

Эта проблема возникла косвенно в предыдущем вопросе о переполнении стека: Поддержка браузером использования зарезервированного слова в качестве имени свойства в JavaScript . Ответ казался всеобщим консенсусом Алекса Уэйна :

Вы можете использовать эти слова, но только в виде строк, а не сокращений свойства.

 foo ['класс'];  // круто
foo.class;  // не круто
 

Хотя я думаю, что они, вероятно, более осведомлены в этой области, чем я, и, вероятно, плохая идея использовать зарезервированные слова в некоторых ситуациях, я думаю, что их вывод ошибочен, основываясь на двух моментах:

  • тестирование зарезервированных слов с использованием их в качестве «сокращенных» свойств

  • HTMLFormElement делает невозможным не использование зарезервированных слов в «сокращении»

Во-первых, используя список зарезервированных слов, каждый был добавлен как свойство к объекту Object и HTMLElement , как obj ["word"] и obj.word , а затем извлекается как obj ["слово"] и obj.word . В каждом из 63 случаев все восемь тестов работали правильно.

Во-вторых, HTMLFormElement требует, чтобы это работало, потому что он извлекает свои элементы с использованием сокращенной записи. Если является элементом формы, то form.typeof == «скаляр».

Из моего опыта , зарезервированные слова - это обычно данные (например, столбец с именем "private"), а не программа. Таким образом, они загрязняют объекты JSON и оттуда ввод, а оттуда HTMLFormElement. Проще говоря, без огромного объема (ИМХО ненужной) работы невозможно сохранить зарезервированные слова , не заставляя работать правильно в сокращении.

Мне кажутся настоящими проблемами:

  • забота необходимо принять меры, чтобы не конфликтовать с существующими свойствами , незарезервированными словами

  • (многими, если не всеми) переменными не могут быть зарезервированные слова

  • использование зарезервированных слов в качестве свойств может быть (но не обязательно) сбивающим с толку

Правильно ли это заключение, что зарезервированные слова как имена свойств и доступ к ним в виде строк или сокращений - это нормально - если к ситуации применяется немного здравого смысла?

43
задан jonrsharpe 25 August 2019 в 07:50
поделиться