未定义的检查是否在IE6中没有typeof的情况下抛出错误?

时间:2011-01-26 18:20:39

标签: javascript internet-explorer-6

我现在无法访问IE6,所以,我在这里问。

如果我有比较,例如:

// imagine App being declared as an obj somewhere...
if (App.errorLog === undefined) {
    App.errorLog = [];
}

如果该属性从未在任何地方声明或定义,那么该代码会在IE6中引发错误吗?即使在IE7中,它似乎在其他浏览器中也能正常工作。我只是认为我在使用IE6时遇到了一些问题而使用typeof来解决这些问题,但我不确定。

4 个答案:

答案 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。