Подтвердить что ты не робот

Тест для функции undefined в Javascript

Итак, Safari продолжает кричать на меня за одну конкретную ошибку.

Я пытаюсь использовать API Карт Google и звоню map.getCenter();. Однако иногда это происходит до полной загрузки map.

Поэтому вместо этого в моей функции я тестирую вызов undefined следующим образом:

if (map.getCenter() != undefined)

Но это все еще ошибка, потому что я думаю, что даже не нравится делать вызов только для проверки, если результат undefined или нет?

Могу ли я получить помощь здесь?

Спасибо!

4b9b3361

Ответ 1

if (typeof map !== 'undefined' && map.getCenter) {
   // code for both map and map.getCenter exists
} else {
  // if they dont exist
}

Это правильный способ проверить существование функции. Вызов функции для проверки ее существования приведет к ошибке.

UPDATE: Обновлен сниппет.

Ответ 2

Я действительно предпочитаю что-то в этом направлении.

if(typeof myfunc == 'function') { 
    myfunc(); 
}

Просто потому что что-то не undefined не делает его функцией.

Ответ 3

Технически вы должны тестировать, если map undefined, а не map.getCenter(). Вы не можете вызвать функцию по ссылке undefined.

Однако собственный учебник Google предполагает, что вы вызываете свой JavaScript, который обращается к API в обработчике body.onload, чтобы вы не пытались ссылаться на все, пока все файлы удаленных .js не будут загружены - вы это делаете? Это решило бы проблему навсегда, а не потерпеть неудачу, когда ваш JavaScript выполнит перед загрузкой API.

Ответ 4

if (typeof map.getCenter !== 'undefined')

Не будет ошибок.

Итак, еще лучше, if (typeof map.getCenter === 'function') map.getCenter();

Ответ 5

Недавно я привык использовать оператор typeof для проверки вещей и типов. Он возвращает тип как строку, которая, как я думаю, позволяет избежать некоторой путаницы типа ответа.

if( typeof map.getCenter != 'undefined') ...

Я не уверен, правильнее ли это, но я нашел хорошие результаты в этом процессе.

Ответ 6

Вы должны проверить, есть ли map undefined. В вашей текущей проверке вы все еще пытаетесь выполнить вызов функции.

Ответ 7

Предполагая, что map.getCenter() всегда является функцией, достаточно просто использовать эту проверку:

if (map.getCenter) {
      var x = map.getCenter();
}