js关于undefined的判断?

js关于undefined的判断?

undefined 并非是一个关键字,而是全局对象的一个属性(全局变量),在 ES5 中,该属性是只读的(参考ecma sec),但是在 ES3 中并没有这个规定。因此,在没有实现 ES5 的浏览器中,对 undefined 的实现是有差别的,在早期的 IE 中,undefined 是可以赋值的全局变量,会使 test === undefined 这种判断并不符合预期,容易导致 bug,如:

也许你会问,我的项目已经不用兼容老 IE 了,这么写是不是就没有问题了? 非也!之前我们说过,undefined 并非是一个关键字,即便是实现了 ES5 的浏览器,在局部作用域(一个函数内部),仍然可以定义一个名为 undefined 的变量,并赋值:

惊不惊喜?意不意外?