【问题标题】:Is there a jQuery construct for "if (typeof someVar === 'undefined')"是否有“if (typeof someVar === 'undefined')”的 jQuery 构造
【发布时间】:2011-02-13 16:02:01
【问题描述】:

jQuery 是否提供了一种更简洁的测试方式?

更新 我应该把 jQuery 排除在外。这只是 JavaScript 的一个问题。对我来说已经很久了!我正在测试以查看是否加载了外部定义的模块。看来我可以改用这个:

if (window.someVar)

如果这是一个不好的做法,请纠正我。就我而言,如果定义了 someVar,它将是一个对象。它不会被定义为 false。

【问题讨论】:

  • 有什么用?这个 if 语句还有什么不够简洁的地方?
  • 是的,如果 someVar 始终只让您感兴趣作为一个对象,那么 window.someVar 将起作用,除非其他代码用真实值定义 window.someVar
  • 我不知道该接受哪个答案。我问我的问题做得不好。

标签: javascript jquery


【解决方案1】:

此答案必须至少为 30 个字符,答案为:否。

【讨论】:

  • 你要找的词是“Noooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
  • @jAndy:好吧,如果您将自己限制为基于 jQuery 的解决方案,那么答案显然是“否”。但肯定有更简洁的写法。
  • @jAndy 喜欢 if (someVar === void window.undefined = true)。最好检查undefined
  • @patrick:是的,但问题很简单。无论如何,我想知道这里没有人提到jQuery.type()
  • @Raynos:“最好”是什么意思?
【解决方案2】:

如果您的代码可以接受将nullundefined 视为相等,则可以通过对null 执行== 测试来避免typeof,这也将是true undefined.

if( someVar == null ) {
    // it was either null or undefined 
}

【讨论】:

  • @Raynos:我认为 OP 正在使用 typeof 以避免重新定义 undefined 可能出现的问题。我的个人意见是,如果undefined 已定义,代码应该中断。
  • @patrickdw 我认为 OP 并不知道得更好。使用闭包获取您自己的undefined 副本。 typeof 的常见用例是测试未声明的变量。
  • @Raynos:是的,我更愿意定义一个undefined 参数。
  • @Fantius 检查nullundefined。大多数时候你在wild 中找不到null。所以很安全。
  • @Fantius 然后检查它是否存在于全局范围内,即if (window.someVar === undefined)
【解决方案3】:
(function(params, undefined) {
    // ...
    if (someVar === undefined) {
        ...
    }
    ...
    window.SomethingGlobal = SomethingGlobal;
}(params));

您可以在函数中将声明undefined 设置为变量。如果该参数未传入,那么您可以保证它的值为undefined

最好使用这样的闭包来创建一个独特的范围。如果您需要将任何内容提升到全局范围,请手动将其设置在窗口上。

或者,这也可以:

if (someVar = void 0) {
   ...
}

void 是一个有趣的命令。它需要一个表达式,它运行表达式并始终返回 undefined 而不是表达式的 return value

【讨论】:

    【解决方案4】:

    没有真正的方法可以使它更简洁。由于该代码测试变量 someVar 是否已声明,因此名称 someVar 的唯一安全使用是作为 typeof 的操作数(如果未声明变量,所有其他使用都会引发错误)。

    我猜你可以通过使用函数使表达式的其余部分更短:

    function isUndefined(type)
    {
        return type === 'undefined';
    }
    
    if (isUndefined(typeof someVar)) {
        // ...
    }
    

    但这可能不值得麻烦。

    【讨论】:

      【解决方案5】:

      只要typeof 的“大变种”包括像object 这样的“天才”*离子*,你就可以考虑这个作弊:

      typeof someVar >= 'u'ndefine

      这将加快字符串比较,但会降低代码的可读性和清洁度。

      无论多么简短都是美化的,也许最好提醒一下,有一个像>==<这样的字符串运算符,经常被遗忘,因此不使用。 ;)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-12-07
        • 1970-01-01
        • 1970-01-01
        • 2018-12-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-30
        相关资源
        最近更新 更多