Может ли reserved word
использоваться в качестве имени свойства объекта?
Эта проблема возникла в ходе косвенного ответа stackoverflow .Ответ @Squeegy, казалось, был общепринятым:
Вы можете использовать эти слова, но только как строки, а не как сокращенные свойства - foo["class"]
это круто, тогда как foo.class
не является
, а дает полезную ссылку на
список зарезервированных слов , хотя я думаю, что @Squeeky, вероятно, более осведомлен, чем я, в этой области, и, вероятно, плохая идея использовать зарезервированные слова в некоторых ситуациях,Я думаю, что его вывод неверен, основываясь на двух моментах:
Сначала, используя список зарезервированных слов, каждое из них было добавлено в качестве свойства к Object
иHTMLElement
, как obj["word"]
и obj.word
, а затем извлекается как obj["word"]
и obj.word
.В каждом из 63 случаев все восемь тестов работали корректно.
Во-вторых, HTMLFormElement требует этой работы, потому что он получает в своих элементах сокращенную запись.Если <input name='typeof' value='scalar' />
является элементом формы, то form.typeof
== "scalar".
Из моего опыта зарезервированные слова обычно представляют собой данные (например, столбец с именем "private"), а не программынанесен.Как таковые они загрязняют объекты JSON, а оттуда INPUT и оттуда HTMLFormElement.Проще говоря, без огромного количества (имхо ненужной) работы невозможно сохранить зарезервированные слова , а не , которые будут вынуждены корректно работать в сжатой форме.
Мне кажется, что настоящие проблемы:
необходимо соблюдать осторожность, чтобы не конфликтовать с существующими свойствами , не зарезервированными словами
(многие, если не все) переменные нельзя зарезервировать слова
использование зарезервированных слов в качестве свойств может (но не обязательно) сбивать с толку
Правильно ли тогда сделать такой вывод, что зарезервированные слова в качестве имен свойств и доступ к ним в виде строк или сокращений - это просто замечательно, если к ситуации применяется немного здравого смысла?