检测"未定义"被覆盖的可能方法?

Sti*_*rik 3 javascript debugging undefined

我目前在IE7中有一个错误,其中未定义被覆盖导致网站崩溃.它适用于Firefox,Chrome和IE8 +(我猜是因为那些浏览器不允许未定义被覆盖).

我正试图找到它的位置,以便能够保护我的代码.不幸的是,它不是我自己的代码.我试图在firebug中寻找"undefined =","undefined ="和"['undefined']",希望我发现哪个依赖正在改变覆盖它,但是没有成功.

我现在被困住了,我真的不知道还有什么可以尝试的.有没有人知道我能做些什么才能找到对此负责的代码行?

提前致谢!

Nie*_*sol 5

你永远不应该使用undefined它,就好像它是一个值.测试undefined-ness的正确方法是typeof somevar == "undefined"

  • 我不同意这一点.这就像说,不应该*依赖于True或False是Python(2.x)中可预测的值,因为它们可以重新分配.我的观点:**任何改变"未定义"值的代码都会被打破** - 它打破了预期的合同,这就是所有的编程都是.因此,在任何期望*my*代码运行的环境中,`undefined === void(0)`最好是真的.(不是我经常使用`undefined`;另外,为什么不用`x === void(0)`进行比较?) (2认同)
  • 请注意,如果要传递JSLint,它将坚持直接与`undefined`值进行比较.如果`undefined`被覆盖,你可以比较例如`void 0`. (2认同)
  • @jbabey - 我知道,我并不是说我同意这个警告.但是很多人确实依赖JSLint来增强代码的信心或强制执行编码风格.但就个人而言,我非常喜欢`x === void 0`比`typeof x ==="undefined"快得多! (2认同)