我现在无法访问IE6,所以,我在这里问。
如果我有比较,例如:
// imagine App being declared as an obj somewhere...
if (App.errorLog === undefined) {
App.errorLog = [];
}
如果该属性从未在任何地方声明或定义,那么该代码会在IE6中引发错误吗?即使在IE7中,它似乎在其他浏览器中也能正常工作。我只是认为我在使用IE6时遇到了一些问题而使用typeof
来解决这些问题,但我不确定。
答案 0 :(得分:4)
未设置的属性将仅返回undefined
的值。只有未声明的变量实际上会引发ReferenceError
,这时您必须使用typeof foo === 'undefined'
。
是的,你的代码会起作用。
答案 1 :(得分:1)
在IE6中正常工作
答案 2 :(得分:1)
typeof
技巧解决了覆盖全局undefined
或未声明变量的问题。
在您的情况下,您只是检查App
对象中是否存在属性。只要App
存在,就不应该有声明问题。
如果某些代码有可能覆盖undefined
,那么您需要typeof
。
测试属性的另一种方法是:
if ( !('errorLog' in App) ) {
App.errorLog = [];
}
这也会查看prototype
的成员,因此相当于检查undefined
,它解决了undefined
被覆盖的问题。
答案 3 :(得分:0)
我相信它不会抛出异常但只是它会超出if条件。 我也没有听说过未定义的价值。 如果你试图说如果没有设置App.errorlog那么代码应该是 App.errorlog == null。