Ответ 1
Используйте i += 1
вместо этого, если вы хотите следовать советам jslint.
Что такое лучшая практика для этого?
Jslint объясняет, что это "добавляет путаницу". Я этого не вижу...
EDIT: Код, по запросу:
var all,l,elements,e;
all = inElement.getElementsByTagName('*');
l = all.length;
elements = [];
for (e = 0; e < l; (e++))
{
if (findIn)
{
if (all[e].className.indexOf(className) > 0)
{
elements[elements.length] = all[e];
}
} else {
if (all[e].className === className)
{
elements[elements.length] = all[e];
}
}
}
Используйте i += 1
вместо этого, если вы хотите следовать советам jslint.
Просто добавьте /*jslint plusplus: true */
перед вашим файлом javascript.
Чтобы избежать путаницы и возможных проблем при использовании minifiers, всегда обменивайте parens вокруг оператора и его операнда при использовании вместе с тем же (+ или -).
var i = 0, j = 0;
alert(i++ +j);
Это добавляет я и j (и увеличивает я в качестве побочного эффекта), в результате чего появляется предупреждение 0.
Но что кто-то приходит и перемещает пространство?
var i = 0, j = 0;
alert(i+ ++j);
Теперь этот первый приращает j, а затем добавляет я к новому значению j, в результате чего появляется предупреждение 1.
Это можно легко решить, выполняя
var i = 0, j = 0;
alert((i++) +j);
Теперь это не может быть ошибкой.
Лично я предпочитаю ставить такие выражения, как i++
в строке. Включение их как части более крупного заявления может вызвать путаницу для тех, кто не уверен, что должна делать линия.
Например, вместо:
value = func(i++ * 3);
Я бы сделал это:
value = func(i * 3);
i++;
Это также означает, что люди не должны помнить, как работают i++
и ++i
, и устраняет необходимость применения довольно большого количества правил предпочтений.
Реальная проблема оператора ++
заключается в том, что он является оператором с побочными эффектами и, следовательно, полностью противоположно принципу функционального программирования.
"Функциональный" способ реализации i++
будет i = i + 1
, когда вы явно переназначаете переменную без побочных эффектов, а затем ее используете.
Возможность путаницы заключается в том, что ++
выполняет две вещи, добавляя значение И переназначая его переменной.
JSLint дружественный цикл
for (i = 0; i < 10; i += 1) {
//Do somthing
}
Обратите внимание, что оператор ++ зависит от позиции по отношению к предыдущей/следующей переменной и новой строки/точки с запятой для определения порядка операций.
var a = 1;
var b = a++;
console.log(b); // b = 1
console.log(a); // a = 2
var a = 1;
var b = ++a;
console.log(b); // b = 2
console.log(a); // a = 2
Есть что-то, называемое pre-increment: ++ я и post-increment я ++ и есть разница:
var i = 9;
alert(++i); //-> alerts 10
var j = 9;
alert(j++); //-> alerts 9
alert(j); //-> alerts 10 now, as expected
var k = 9;
alert((k++)); //-> still alerts 9 even with extra parentheses