这些未定义的检查在行为上是否相同?

时间:2014-01-10 16:05:59

标签: javascript undefined

我似乎有不同的方法(严格平等)检查undefined

  • if (something === undefined)
  • if (typeof something === 'undefined')
  • if (something === void 0)
  • ,可能还有其他

快乐场景中,他们的行为是一样的。换句话说,它们都有效。

但是,考虑到JavaScript的所有怪癖,它们的行为是否完全相同?

如果是,为什么人们选择其他方法而不是第一种?这是某种遗产还是误解?因为第一个在可读性和意图演示中显然是最明显的。

2 个答案:

答案 0 :(得分:3)

if (something === undefined)是标准的正常方式

声明变量的

typeof something === 'undefined'主要是一种过度防御解决方案,可以追溯到你可以改变window.undefined的时间。如果您不知道您的变量是否被声明,它的优点是不会引发错误,但我不认为合法代码应该支持声明状态未知的变量的情况。

void 0(或void anything)是获得undefined的标准化方式,因此它等同于第一个但无用的。

答案 1 :(得分:0)

  1. 字面意思undefined
  2. 测试是否存在,如“未声明的变量”。
  3. undefined相同。较旧版本的JS标准允许您更改undefined的值,因为它只是一个变量。 void 0undefined,更安全。
  4. 额外的一个:

    1. if (x == null)。由undefined测试null undefined == null,但请记住,undefined !== null
    2. 在JavaScript中,类型为'undefined',值为undefined。值undefined的类型为'undefined'