开发者问题收集

JavaScript 检查变量是否存在(已定义/初始化)

2011-02-25
2595428

哪种检查变量是否已初始化的方法更好/正确? (假设变量可以保存任何内容(字符串、整数、对象、函数等))

if (elem) { // or !elem

if (typeof elem !== 'undefined') {

if (elem != null) {
3个回答

您需要 typeof 运算符 。具体来说:

if (typeof variable !== 'undefined') {
    // the variable is defined
}
Jim Puls
2009-02-06

typeof 运算符将检查变量是否确实未定义。

if (typeof variable === 'undefined') {
    // variable is undefined
}

与其他运算符不同, typeof 运算符在与未声明的变量一起使用时不会引发 ReferenceError 异常。

但是,请注意 typeof null 将返回 “object” 。我们必须小心避免将变量初始化为 null 的错误。为了安全起见,我们可以改用以下内容:

if (typeof variable === 'undefined' || variable === null) {
    // variable is undefined or null
}

有关使用严格比较 === 而不是简单相等 == 的更多信息,请参阅:
在 JavaScript 比较中应使用哪个等号运算符(== 与 ===)?

Samuel Liew
2011-06-28

在许多情况下,使用:

if (elem) { // or !elem

将为您完成工作!...这将检查以下情况:

  1. undefined :如果值未定义并且为 undefined
  2. null :如果它为空,例如,如果 DOM 元素不存在...
  3. 空字符串 ''
  4. 0 :数字零
  5. NaN :不是数字
  6. false

因此它将涵盖所有情况,但总是有一些奇怪的情况我们也想涵盖,例如,带有空格的字符串,就像这个 ' ' 一样,这将在 javascript 中定义字符串内部有空格...例如,在这种情况下,您可以使用 trim() 添加另一个检查,如:

if(elem) {

if(typeof elem === 'string' && elem.trim()) {
///

此外,这些检查仅适用于 ,因为对象和数组在 Javascript 中的工作方式不同,空数组 [] 和空对象 { 始终为 true

我创建了下面的图片来简要介绍一下答案:

undefined, null, etc

Alireza
2017-09-01