2016-11-16 81 views
0

,为什么不能使用“!! document.getElementsByClassName && function(){return document.getElementsByClassName(obj)}”来检查是否存在Explorer的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. 我想知道是否有一些简化代码?

回答

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; 
} 
+0

这是除了在功能上的事实,甚至在“修复”之后,如果getElementsByClassName不可用,它也没有做它应该做的事情。 – MasterAM