js关于undefined的判断?

最近看到一些前端开发团队规范中里写到关于undefined的判断时, 建议使用以下写法,有什么原因吗? 永远不要直接使用undefined进行变量判断…
关注者
8
被浏览
12,522
登录后你可以
不限量看优质回答私信答主深度交流精彩内容一键收藏

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

var test;
undefined = 1;

typeof test === "undefined" // ture
test === undefined          // false
alert(test)                 // undefined
alert(undefined)            // 1


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

(function () { var undefined = 123; return undefined; }()) // 123


惊不惊喜?意不意外?