当我想检查资源管理器是否存在 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()时,控制台显示“未定义”。
以上描述,
答案 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;
}