为什么不能使用“!! document.getElementsByClassName&& function(){return document.getElementsByClassName(obj)}”来简化代码

时间:2016-11-16 06:53:32

标签: javascript

当我想检查资源管理器是否存在 getElementsByClassName 时。 我在代码下使用它并且运行良好。

function getClass(obj) {
  if (document.getElementsByClassName) {
    return document.getElementsByClassName(obj)
  }
}//work well

为了简化我的代码,我更改了代码并且也运行良好:

function getClass(obj) {
  if (document.getElementsByClassName) return document.getElementsByClassName(obj);
}//work well
但是当我写这篇文章时,它会给出一些错误

function getClass(obj) {
  !!document.getElementsByClassName && (
    return document.getElementsByClassName(obj));
}//work badly

Chrome.Error邮件中存在错误“Uncaught SyntaxError:Unexpected token return”。 为了解决这个错误,我改变了我的代码,见下:

function getClass(obj) {
  !!document.getElementsByClassName && function() {
    return document.getElementsByClassName(obj)
  };
}

但是当我使用 getClass()时,控制台显示“未定义”。

以上描述,

  1. 我不知道为什么“&&”用得那么难?
  2. 我想知道是否有一些简化代码?

1 个答案:

答案 0 :(得分:3)

这个问题:

function getClass(obj) {
    !!document.getElementsByClassName && ( return document.getElementsByClassName(obj) );
}//work badly

您不能将return用作逻辑表达式的一部分。

这个问题:

function getClass(obj) {
    !!document.getElementsByClassName && function() {
        return document.getElementsByClassName(obj)
    };
}

你实际上没有return任何东西,你只是创建一个未分配给任何东西的匿名函数,因此总是会返回默认的undefined

你可以通过在逻辑条件之前放置return来做这样的事情。

function getClass(obj) {
    return !!document.getElementsByClassName && document.getElementsByClassName(obj);
}

老实说,这些短路技巧实际上并不简单,我建议只使用选项1或三元运算符。

function getClass(obj) {
    return document.getElementsByClassName ?
        document.getElementsByClassName(obj) :
        null;
}