为什么我应该使用下划线的isUndefined(x)而不是x === undefined?

sdr*_*sdr 4 javascript underscore.js

使用isUndefined有什么好处吗?是否值得额外的函数调用?它不再具有可读性.

Pet*_*son 8

这个名字undefined可以被遮蔽.也就是说,有人可以做到这一点

var undefined = 5;
Run Code Online (Sandbox Code Playgroud)

并打破使用的代码x === undefined(参见底部的注释).为了安全地解决这个问题,你可以使用

typeof x === 'undefined'
Run Code Online (Sandbox Code Playgroud)

要么

x === void 0
Run Code Online (Sandbox Code Playgroud)

这正是下划线功能的作用.


注意:由于ECMAScript 5 undefined是只读的.在旧版浏览器中,undefined可以重新定义全局.即使在较新的浏览器中,undefined也可以被局部变量遮蔽:

function f() {
  var undefined = 5;
  return undefined;
}
f() // returns 5
Run Code Online (Sandbox Code Playgroud)