检查变量是否为 undefined 有两种常用方法。我们可以使用相等运算符(==)或 typeof 运算符:
variable === undefined
typeof variable === 'undefined'
区别
typeof 运算符适用于未声明的变量,而相同的运算符将引发 ReferenceError 异常。
typeof undeclaredVar === 'undefined' // true
undeclaredVar === undefined // 引发 ReferenceError 异常
提示
在运行 ES3 enginee 的旧浏览器中,undefined 是一个全局变量名,其原始值未定义。可以更改该值:
// ES3
var person = {}
person.name === undefined // true
// 让我们修改 undefined 的值
undefined = 'Foo'
person.name === undefined // false
为了避免未定义的可重命名或修改值的问题,我们可以将代码包装在 IFFE(立即调用的函数表达式)中,如下所示:
(function(undefined){
  // 在这里使用 undefined 是安全的
})()
// Or
(function(undefined){
  // ...
})(_)在上面的示例代码中,undefined 是函数的一个参数。由于我们不向函数传递任何参数或未定义的变量(_),因此该参数将是未定义的。这种常见模式用于流行的库,如 jQuery、Backbone 等。
如今的现代浏览器并非如此。从 ES5 中,无法更改 undefined,因为其 Writable 属性设置为 false。
建议始终使用 typeof检查操作数的类型。










