назначить переменную и обнаружить нуль в операторе if [duplicate]

1

Как мы можем назначить переменную, а также определить, является ли результат нулевым или ложным в одном выражении if?

function getNodes(selector) {
    var nodeList = document.querySelectorAll(selector);
    if(!nodeList.length) { return null; } else { return nodeList; }
}

var divs;

if( ! divs = getNodes('div') ) { // ReferenceError: invalid assignment left-hand side
    console.log('no divs found');
}

if( divs = getNodes('div') && !divs ) {  // does not work
    console.log('no divs found');
}

if( divs = getNodes('div') && divs==null ) {  // does not work
    console.log('no divs found');
}
<p>
no divs here
</p>

Просто, if(divs = getNodes('div')) работает, но это не то, что я хочу. Мне нужно поймать, если он null или назначить его в одном утверждении.

Решение 1, if( !(divs = getNodes('div')) )

Решение 2 if( (divs = getNodes('div')) == null )

Всем спасибо

  • 1
    Преобразуйте присваивание в выражение, заключив его в скобки (в первом, если).
  • 0
    Не могли бы вы сначала назначить переменную, а затем выполнить проверку позже? var divs = getNodes ('div'); if (! divs) // ложь
Показать ещё 5 комментариев
Теги:

2 ответа

1
Лучший ответ

divs = getNodes('div') будет в основном возвращать значение, присвоенное divs. То, как вы можете сделать a = b = 2.

В вашем случае вы можете в основном сделать:

и поэтому ((div = getNodes('div')) == null) оценивается как true.

Это означает, что в основном вы можете:

if((div = getNodes('div')) === null){
    //do Whatever
}

Или, если вы просто хотите проверить, является ли его null, и вы знаете, что он никогда не будет оценивать значение false (или если false также является условием ошибки), вы можете:

if(!(div = getNodes('div'))){
    //do whatever
}
0

Это должно делать то, что вы пытаетесь выполнить.

function getNodes(selector) {
    var nodeList = document.querySelectorAll(selector);
    if(!nodeList.length) { return null; } else { return nodeList; }
}

var divs;

if( !(divs = getNodes('div')) ) { // ReferenceError: invalid assignment left-hand side
    console.log('no divs found');
}

console.log(divs);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню