我应该使用(typeof(val)==='undefined')还是(val === undefined)?

Mic*_*ear 5 javascript

这类似于关于SO的其他一些问题,但与我能找到的任何问题都不完全相同.

哪个是在Javascript中检查未定义值的最佳方法,为什么?

第一个例子:

var a;
if (typeof(a) === 'undefined'){...}
Run Code Online (Sandbox Code Playgroud)

第二个例子:

var a;
if (a === undefined){...}
Run Code Online (Sandbox Code Playgroud)

因此,第一个示例是将类型的名称与字符串进行比较,第二个示例是使用等于运算符将变量与未定义的对象进行比较,该运算符检查类型和值是否相同.

哪个更好?或者他们俩都和对方一样好?

请注意,我不是在询问undefined和null之间或truthy或falsey之间的任何区别,只是这两种方法中的哪一种是正确的和/或更好的.

Que*_*tin 9

如果变量不存在,那么当您尝试使用它时,您将收到引用错误 - 即使您正在将其与之进行比较undefined.所以总是使用typeof.

> foo === undefined
ReferenceError: foo is not defined
    at repl:1:2
    at REPLServer.eval (repl.js:80:21)
    at Interface.<anonymous> (repl.js:182:12)
    at Interface.emit (events.js:67:17)
    at Interface._onLine (readline.js:162:10)
    at Interface._line (readline.js:426:8)
    at Interface._ttyWrite (readline.js:603:14)
    at ReadStream.<anonymous> (readline.js:82:12)
    at ReadStream.emit (events.js:88:20)
    at ReadStream._emitKey (tty.js:320:10)
> typeof foo === "undefined"
true
Run Code Online (Sandbox Code Playgroud)

(坏)代码也可能被覆盖undefined,这将导致未定义的值不等于undefined.

  • 类型转换不是必需的,`===`就足够了. (2认同)