2016-11-16 2 views
0

, когда я хочу проверить, существует ли для Explorer Explorer getElementsByClassName. Я использую код, и он работает хорошо.Почему я не могу использовать «!! document.getElementsByClassName && function() {return document.getElementsByClassName (obj)}" для упрощения кодов

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: Неожиданный маркер возврата". для лечения этой ошибки, изменить мои коды см под:

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

Смежные вопросы