web-dev-qa-db-ja.com

jslintの「予期しない++」エラー

isそのときのベストプラクティスは何ですか?

Jslintは、「混乱を招く」と説明しています。本当に見えない...

編集:要求されたコード:

  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];
        }
    }
  }
144
KdgDev

つかいます i += 1代わりに、jslintのアドバイスに従う場合。

92
unomi

JavaScriptファイルの前に/*jslint plusplus: true */を追加するだけです。

88
Rico Sonntag

混乱、およびミニファイヤを使用する際に起こりうる問題を回避するために、同じ(+または-)とともに使用する場合は、常に演算子とそのオペランドを括弧で囲みます。

var i = 0, j = 0;
alert(i++ +j);

これにより、iとjが追加され(副作用としてiが増加します)、0がアラートされます。

しかし、誰かが一緒に来て、スペースを動かしているのは何ですか?

var i = 0, j = 0;
alert(i+ ++j);

これにより、最初にjがインクリメントされ、次にjの新しい値にiが追加され、1がアラートになります。

これは簡単に解決できます

var i = 0, j = 0;
alert((i++) +j); 

これは間違いではありません。

28
Sean Kinsey

個人的には、i++単独で行に。大きな文の一部としてそれらを含めると、その行が何をしているのかわからない人たちを混乱させる可能性があります。

たとえば、次の代わりに:

value = func(i++ * 3);

私はこれをします:

value = func(i * 3);
i++;

それはまた、人々がどのようにi++および++i動作し、非常に多くの優先ルールを適用する必要がなくなります。

14
Samir Talwar

++演算子の本当の問題は、副作用を持つ演算子であるため、関数型プログラミングの原理に完全に反対しているということです。

i++を実装する "functional"の方法は、副作用のない変数を明示的に再割り当てして使用するi = i + 1になります。

混乱の可能性は、++が値を追加し、変数に再割り当てすることで2つのことを行うことです。

9
benzonico

JSLintフレンドリーループ

for (i = 0; i < 10; i += 1) {
    //Do somthing
}

++演算子は、操作の順序を決定するために、prior/next変数と改行/セミコロンに関する位置に依存することに注意してください。

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
4

プリインクリメントと呼ばれるものがあります:++ iおよびポストインクリメントi ++と違いがあります:

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
3
Paul Scheltema