Я пытаюсь выполнить итерацию по массиву элементов. Документация jQuery гласит:
Возвращение non-false совпадает с инструкцией continue в цикле for, оно немедленно переходит к следующей итерации.
Я пробовал называть 'return non-false'; и "неверный"; (sans return), ни один из которых не переходит к следующей итерации. Вместо этого они прерывают цикл. Что мне не хватает?
То, что они подразумевают под неверным, это:
return true;
Итак, этот код:
var arr = [ "one", "two", "three", "four", "five" ];
$.each(arr, function(i) {
if(arr[i] == 'three') {
return true;
}
alert(arr[i]);
});
Будет предупреждать один, два, четыре, пять
Посредством 'return non-false', они означают, чтобы вернуть любое значение, которое не получилось бы для boolean false. Таким образом, вы можете вернуть true
, 1
, 'non-false'
или все, что еще можно придумать.
У Javascript есть идея "правды" и "фальшивости". Если переменная имеет значение, тогда, как правило, вы увидите, что она имеет "правду" - значение null, или никакое значение не стремится к "ложности". Ниже приведенные ниже фрагменты могут помочь:
var temp1;
if ( temp1 )... // false
var temp2 = true;
if ( temp2 )... // true
var temp3 = "";
if ( temp3 ).... // false
var temp4 = "hello world";
if ( temp4 )... // true
Надеюсь, что это поможет?
Кроме того, стоит проверить эти видео от Дугласа Крокфорда
0
также является ложным значением, и отрицание его является правдивым (и наоборот для любого другого числа, например !-42 === false
).
Не забывайте, что иногда вы можете просто упасть с конца блока, чтобы перейти к следующей итерации:
$(".row").each( function() {
if ( ! leaveTheLoop ) {
... do stuff here ...
}
});
Вместо того, чтобы возвращаться так:
$(".row").each( function() {
if ( leaveTheLoop )
return; //go to next iteration in .each()
... do stuff here ...
});
Цикл только ломается, если вы вернетесь буквально false
. Пример:
// this is how jquery calls your function
// notice hard comparison (===) against false
if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
break;
}
Это означает, что вы можете вернуть что-нибудь еще, в том числе undefined
, что вы возвращаете, если вы ничего не возвращаете, поэтому вы можете просто использовать пустой оператор return:
$.each(collection, function (index, item) {
if (!someTestCondition)
return; // go to next iteration
// otherwise do something
});
Возможно, это может отличаться по версии; это применимо для jQuery 1.12.4. Но на самом деле, когда вы выходите из нижней части функции, вы также ничего не возвращаете, и поэтому цикл продолжается, поэтому я ожидаю, что нет никакой возможности, чтобы возвращающее ничего не могло продолжить цикл. Если они не хотят заставить всех начать что-то возвращать, чтобы сохранить цикл, возвращение ничего не должно быть способом, чтобы сохранить его.
jQuery.noop() может помочь
$(".row").each( function() {
if (skipIteration) {
$.noop()
}
else{doSomething}
});