С самого начала IE создавал глобальные переменные, которые ссылаются на элементы по их имени или значению атрибута id.Это никогда не было хорошей идеей, но было скопировано другими браузерами, чтобы быть совместимым с сайтами, созданными для IE.
Это плохая идея и не должна копироваться или использоваться.
Редактировать
Чтобы ответить на ваши дополнительные вопросы:
... как Chrome разрешит неоднозначность, если у меня есть div с id, но в моем скрипте есть глобальная переменная с именем тоже.
В IE (который ввел это поведение), если глобальная переменная объявлена с тем же именем, что и идентификатор элемента или имя, она будет иметь приоритет.Однако необъявленные глобалы не работают таким образом.Это не займет много времени, чтобы проверить это в Chrome (у меня есть, но я не собираюсь давать вам ответ).
И как будет элемент с id, состоящий из дефисов ("-"), двоеточия (":") и точки (".") должны быть переведены (хорошо, я знаю, что к ним можно получить доступ с помощью document.getElementById, но как браузер переведет его в глобальную переменную, которая их представляла)
Точно так же, как любое имя свойства объекта, которое не является допустимым идентификатором - нотация в квадратных скобках (т. Е. Window ['name-or-id']).