昨天百度新闻的同事让我帮忙排查一下线上问题,最终问题定位到这样一段代码:
if (window.varname === undefined) {
...
}
左侧是Chrome,右侧是Firefox
所以不要写这样的代码
if (window.xxxxxx === undefined) {...}
要写成
if (typeof window.xxxxx === "undefined" ) {....}
更新:
这是Chrome早期版本的一个bug。后续版本已经修正。
下面是ES5中Global对象上全局属性的说明:
15.1 The Global Object
undefined、Infinity、NaN都是全局对象的属性,且writable属性为false。
而null、数值都是primitive value。null是Null类型的唯一实例。数值是Number类型的实例
所以
undefined in window === true
null in window === false