EDIT:
ОП изменил вопрос теперь, чтобы включить getAttribute
или любую произвольную строку в качестве имени элемента формы.
Это ничем не отличается от перезаписи любой существующей переменной. Например, что если я захочу создать переменную с именем window
или document
? или, возможно, я хочу сохранить некоторые данные в переменной с именем forms
и поместить их в существующий объект document
.
Каждый из них будет работать, но не даст ожидаемого результата. В этом суть этого вопроса. "Я могу это сделать?" Да. "Должен ли я сделать это?" Нет.
Мы как разработчики обязаны понимать эти нюансы. И теперь ОП делает.
Больше всего обескураживает тот факт, что ОП теперь знает эту истину, но продолжает заниматься этим вопросом, изменяя перезаписываемую переменную!
END EDIT (Оригинальный ответ об использовании id
в качестве имени):
Вы перепутали разницу между свойством Object и атрибутом HTML.
Мы получаем доступ к свойствам, используя методы доступа к объекту (оператор .
или запись []
).
Мы получаем доступ к атрибутам HTML, используя .getAttribute('name')
. Поэтому, если вы хотите получить значение атрибута, как оно написано в HTML, как подсказывает ваш вопрос, вы должны сделать это с помощью:
document.querySelector("#myform").getAttribute('id')
, который возвращает "myform".
Но, как и большинство вопросов, размышляющих «что, если» без реальной проблемы, которая решается, это кажется немного глупым - в конце концов, элемент был запрошен для использования его идентификатора.
Теперь, если правильно рассмотреть свойства объекта, это:
document.querySelector("#myform").id
делает именно то, что спецификация говорит об оценке синтаксиса:
форма [имя]
Возвращает элемент управления формы (или, если их несколько, RadioNodeList
формы управления) в форме с указанным идентификатором или именем (исключая
изображения кнопок по историческим причинам); или, если их нет, возвращает
элемент img с заданным идентификатором.
После ссылки на элемент с использованием определенного имени это имя
будет по-прежнему доступен как способ ссылки на этот элемент в
этот метод, даже если фактический идентификатор или имя элемента изменяется, как
Пока элемент остается в дереве.
Если имеется несколько совпадающих элементов, тогда объект RadioNodeList
содержащий все эти элементы возвращается.
Здесь: https://html.spec.whatwg.org/multipage/forms.html#the-form-element
Надеюсь, это поможет.