Тест для функции undefined в Javascript
Итак, Safari продолжает кричать на меня за одну конкретную ошибку.
Я пытаюсь использовать API Карт Google и звоню map.getCenter();
. Однако иногда это происходит до полной загрузки map
.
Поэтому вместо этого в моей функции я тестирую вызов undefined
следующим образом:
if (map.getCenter() != undefined)
Но это все еще ошибка, потому что я думаю, что даже не нравится делать вызов только для проверки, если результат undefined
или нет?
Могу ли я получить помощь здесь?
Спасибо!
Ответы
Ответ 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();
}