【问题标题】:How to execute statement in javascript if variable defined [duplicate]如果定义了变量,如何在javascript中执行语句[重复]
【发布时间】:2012-10-01 18:58:40
【问题描述】:

可能重复:
How to check a not defined variable in javascript
Determining if a javascript object has a given property

在我的 beforeSend 函数中我有这个

$.myloader.show();

但是有些脚本没有那个元素,所以我的这一行给了我错误

$.myloader.show(); 告诉我 $.myloader 不存在的错误

我该怎么做

if($.myloader exists)
$.myloader.show();

【问题讨论】:

标签: javascript jquery


【解决方案1】:

最通用和最可靠的解决方案是:

if (typeof $.myloader != 'undefined') {

如果你确定你的变量除了函数或未定义之外不能保存任何东西,你可以使用

if ($.myloader) {

但仅当您确定可能的值时才执行此操作,因为此测试也匹配 false0''

【讨论】:

  • '0'[]等不匹配,逆向测试。
  • 那是不同的东西。 if('0')执行。
  • @pimvdb 你说得对,我有点怀念...
  • 没问题:)。不过,我仍然认为测试是相反的。
  • @pimvdb 我想我需要第二杯咖啡...在编码之前我不应该这样做...
【解决方案2】:

您可以按照以下方式进行...

if(typeof $.myloader != 'undefined')
{    // your code here.  }; 

【讨论】:

  • 你肯定想要!==,而不是!=
  • @nfechner 似乎不需要:typeof 总是返回一个字符串。
【解决方案3】:

未定义的值是 'falsey',并在 if 语句中评估为 false,因此您只需要:

if( $.myloader )
    $.myloader.show();

【讨论】:

    【解决方案4】:

    鉴于 jQuery ($) 是一个对象:

    if ($.hasOwnProperty('myloader'))
    {
        //should work
        //try: $.hasOwnProperty('fn'), it'll return true, too
    }
    

    如果myloader 对象没有直接绑定到 jQuery 对象,而是通过其原型之一:

    if ('myloader' in $)
    {
        //works, like:
        if ('hasOwnProperty' in $)
        {//is true, but it's not a property/method of the object itself:
            console.log($.hasOwnProperty('hasOwnProperty'));//logs false
        }
    }
    

    您可以以相同的方式检查您要使用的方法:

    if ('myloader' in $ && 'show' in $.myloader)
    {
        $.myloader.show();
    }
    

    【讨论】:

    • $ 实际上是一个函数,但当然也继承自Object... 最后,一切都可以(除了Object.create(null)),所以@ 987654329@是。
    • @FelixKling,是的,它是一个函数,但函数是一流的对象。番茄——番茄,真的
    【解决方案5】:

    您可以更快速地执行此操作:

    $.myloader.show() ? console.log('yep') : console.log('nope');
    

    或者:

    $.myloader.show() || console.log('fail');
    

    【讨论】:

      【解决方案6】:

      如果你想要它简短,你也可以这样做:

      $.myloader && $.myloader.show();
      

      第一个操作数(在 && 之前)称为 guard。但是有些人认为这不够可读和安全,因此您可能希望使用if (typeof ...) 解决方案。

      【讨论】:

        猜你喜欢
        • 2011-04-02
        • 1970-01-01
        • 2023-02-15
        • 2023-03-12
        • 1970-01-01
        • 2020-01-18
        • 2020-06-29
        • 2017-01-22
        • 1970-01-01
        相关资源
        最近更新 更多