我以为我已经想到了Javascript,然后这个(看似基本的)东西出现了:
我有一个使用谷歌地图的Phonegap / jQuery Mobile应用程序。如果手机的互联网连接暂时无法使用,并且应用在应用启动时尝试加载Google Maps API的时间,则所有与地图相关的功能自然无效。
然而,奇怪的是这段代码导致它所处的函数中断并停止执行if if check(意味着doSomething()
行永远不会执行):
function myFunction() {
if(google === undefined) {
alert("Google Maps didn't load!");
}
doSomething();
}
在Safari的开发者工具中查看控制台时,我在这篇文章的标题中看到错误。
不检查这样的未定义变量应该是安全的吗?我想处理未加载Google Maps API的边缘情况,但如果我无法检查未定义,我该怎么办呢?我试着做if(!google)
,但结果相同。
当用户使用地图导航到某个页面时,我也尝试使用Google Loader动态加载地图API,但我无法让它工作(Loader也必须动态加载为了这个帮助,我似乎无法动态加载任何脚本)。我尝试使用纯Javascript动态执行此操作,但我认为Google Maps API Javascript中的document.write
在Mobile Safari上打破了这一点。我也试过使用jQuery的$.getScript()
但没有成功。
在任何情况下,如果我能够检测到地图API尚未加载,我应该能够处理这种边缘情况,所以这一切都归结为:如何做到这一点,为什么不做到以上未定义的检查工作?
答案 0 :(得分:5)
请改为尝试:
function myFunction() {
if(window.google === undefined) {
alert("Google Maps didn't load!");
}
doSomething();
}
这是因为google
被解释为非声明的标识符,而window.google
是window
的属性,可能是undefined
。
您也可以使用!window.google
,因为google
是一个对象,因此不能是null
,undefined
,0
或其他虚假值。