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