var myVar; возвращает HTMLDivElement в Chrome, но не в FF?

#javascript #firefox #google-chrome

#javascript #firefox #google-chrome

Вопрос:

Я попытался установить переменную в самой первой строке моего скрипта, чтобы я мог получить к ней доступ позже (и проверить, была ли она неопределенной. Основная суть кода заключается в:

 var map;
var mapIsVisible = false;

console.log(map);

function clearMap() {
  if(map != undefined) {
    map.clear();
  }
}

clearMap();
  

Итак, в FF это работает отлично. Никаких ошибок вообще. Chrome выдает ошибку, которая гласит:

 Uncaught TypeError: Object #<HTMLDivElement> has no method 'clear'
  

что привело меня к созданию этой консоли.регистрируйтесь после создания экземпляра переменной, и то, что я получил, было HTMLDivElement. Почему FF возвращает undefined, в то время как Chrome говорит, что это HTMLDivElement, когда это явно не так? Или chrome устанавливает это для всех объявленных вами переменных, для которых нет никакого типа?

Мое исправление на данный момент состояло в том, чтобы явно указать, что map была неопределенной:

 var map = undefined;
  

и мой скрипт работает хорошо. Что я хочу знать, так это почему это происходит для Chrome

РЕДАКТИРОВАТЬ Как сказано в ответах, у меня действительно есть элемент с идентификатором «map». Я не знал, что они автоматически добавили переменные JS для этого.

Комментарии:

1. Дело не только в этом, как выглядит остальной код.

Ответ №1:

Возможно, у вас где-то на странице есть <div id="map"> , и chrome думает, что вы ссылаетесь на него с помощью используемой вами переменной «map».

Ответ №2:

Я предполагаю, что у вас на странице есть элемент с name или id атрибутом «map». Кажется, я припоминаю, что идентифицируемые элементы автоматически становятся глобальными переменными JS в Chrome. Бог знает почему.

Комментарии:

1. Не знал, что Chrome сделал это… Я сомневаюсь, что даже Бог знает почему.

2. Все браузеры делают это …. в некоторой степени. Однако Gecko делает это только в режиме quirks. Смотрите w3.org/Bugs/Public/show_bug.cgi?id=11960 для обсуждения спецификации, такой, какая она есть.

3. да, должно быть, это оно. у меня действительно есть элемент с идентификатором «map», но я не знал, что Chrome (или другие браузеры) автоматически становятся переменными JS. также спасибо Борису за хорошее чтение!