Переменная javascript соответствует элементу DOM с тем же идентификатором

Я новичок в javascript, и я просто заметил поведение JavaScript, которое я не видел нигде. Если у меня есть элемент DOM с назначенным идентификатором, скажем "x", то в моем javascript этот элемент автоматически присваивается переменной x. Я вижу это в хроме и сафари. Является ли это документированной функцией javascript?

Например:

<!DOCTYPE html>
<html>
<head>
</head>
<body>
<form id='x'>
<input type='text' name='info' id='info'/>
<input type='submit' name='submit' value='Complete'/>
</form>
<script type='text/javascript'>
  window.onload = function() {
    alert( x==document.getElementById('x') );
    info.value = 'Test me!';
  }
</script>
</body>
</html>

При загрузке он будет показывать true, а область ввода отобразит "Test me!". Если это правильное поведение, зачем вообще нужно document.getElementById?

Ответы

Ответ 1

Это поведение описано в стандарте HTML (глава 6.2.4).

В стандарте определяются "именованные элементы", которые являются элементами HTML, которые имеют либо атрибут name, либо id. (Обратите внимание, что атрибут name определяется только для определенных типов элементов HTML.)

Для каждого именованного элемента браузер (среда) определяет соответствующее глобальное свойство.

Ответ 2

<!DOCTYPE html>
<html>
    <head>
        <title>Test</title>
    </head>
    <body>
        <div id="w"></div>

        <script type="text/javascript">

        alert( w );

        w = null;

        alert( w );

        </script>
    </body>
</html>

Попробуйте этот тест в IE8. Вы поймете, что w глобально и не может быть перезаписано. Измените "w = null" в "var w = null" и перезагрузите (после освобождения кеша)...

IE8 проверяет переменные перед выполнением и удаляет глобальный корреспондент. Я действительно не могу дождаться того дня, когда веб-разработчикам больше не придется поддерживать IE8...

СОВЕТ: не используйте имена переменных, равные идентификаторам элемента DOM. OMG OMG

Ответ 3

Это нестандартная функция только для IE.

Не полагайтесь на него.