var === undefined vs. typeof var === 'undefined'

全等号 === 已经在我日常开发中占据绝对位置,在我开发中所有判断里面,== 已经被当作奇淫巧技了,不在万不得已的情况下,不会使用,其地位和分号; 等同。所以,现在讨论如何判断一个值是否为 undefined 的时候,我只会用 ===。

现在的问题是,在 var === undefined vs. typeof var === 'undefined' 这两种判断中,谁更好?先说结论,使用 typeof 的方法更好。最主要的原因有两点:

  • var === undefined 的形式,你不能确保 var 被声明过,当 var 没声明过时,程序直接报错,而使用 typeof 可以用来判定一个变量是否声明过,这也是我们常用的 typeof window ... typeof global ... typeof self ... this 这个办法来搞定不同运行时环境下的处理。
  • undefined 竟然是 window 的属性,按理来说作为 js 语言的基础类型,提供和 null 一样的关键字应该由语言解释器来做吧,但是在运行时中(浏览器),undefined 和 null 完全是两个层面的东西,null 是内置于解析器的空指针符号,而 undefined 是挂在 window 上的全局变量,竟然是挂在 window 上的变量,那么每次使用 var === undefined 时,实际上会去 window 上读取变量,读取的多了,也就让我们开始遐想有没有办法通过不断调用 undefined 变量使系统崩溃。不过值得庆幸的是,undefined 是不能重新赋值的,undefined = 1 虽然不会报错,但是没效果。而执行 null = 1 则会直接报错。就是这么奇妙。

虽然使用 typeof 要多写好多个字母,但是,抛开其他各种个人偏好问题,上面这两个理由足以让人选择 typeof 的形式来判断 undefined 了。