我只是想知道什么是正确的方法来检查一个函数是否未定义,脚本将在高级模式下关闭以及如何访问全局函数?
E.g。检查是否加载了Google Analytics的示例:
typeof window["ga"] == "function"
typeof window["ga"] !== "undefined"
但是以下是关闭编译器的子弹证明吗?
typeof window["ga"] == function
typeof window["ga"] !== undefined
那么localStorage呢?像魔术一样,以下工作在chrome:
if (localStorage != undefined ) myvariabel = localStorage.getItem('myvariable')
但在我看来,就像脏编码一样。在我看来,以下是正确的还是?
if(typeof localStorage != "undefined")
// or even better the following since per definition local storage is an attribute of window:
if(typeof window["localStorage"] != "undefined") myvariabel = window["localStorage"].getItem('myvariable')
在此上下文中,.getItem可以安全地在高级编译器模式下使用,或者我必须编写代码:
if(typeof window["localStorage"] != "undefined") myvariabel = window["localStorage"]["getItem"]('myvariable')
答案 0 :(得分:2)
typeof
运算符会为您提供一个描述该类型的字符串。
function
不是字符串,预计会跟随某些字符。因此typeof window["ga"] == function
会抛出异常。
typeof
会一直给你一个字符串。字符串永远不是未定义的值。 typeof window["ga"] !== undefined
将始终为您提供true
结果。
所以没有。不使用字符串不是防弹。恰恰相反;它不会在任何地方工作。
那么localStorage
呢
这与任何其他变量没有什么不同。
像魔术一样,以下内容适用于chrome
if(localStorage!= undefined)
现在您正在测试变量是否等于undefined
,而不是使用typeof
。这是一个完全不同的问题。
这将有效......但仅限于:
undefined
未被定义为和 localStorage
已宣布如果尚未声明您将获得 ReferenceError 并且您的脚本将中止(除非您使用的是try / catch)。
所以没有。切勿直接将变量与undefined
进行比较。
undefined
并不是您认为的可能性很小。大多数情况下,您关心的变量是声明以及被定义。剩下的时间你可以继续使用typeof
,因为它可以在任何地方可靠地工作,并且习惯使用它比混合和匹配更好,有时候会出错。