147

そのためのベストプラクティス何ですか?

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];
        }
    }
  }
4

8 に答える 8

94

長年のベスト プラクティス:i += 1代わりに、jslint のアドバイスに従って使用してください。

++Crockford 氏によると、なぜそれが よりも優れた方法であるかについては、次のように述べています。

インクリメント演算子++とデクリメント--演算子を使用すると、非常に簡潔なスタイルで記述できます。C などの言語では、次のようなワンライナーを記述できるようになりましたfor (p = src, q = dest; !*p; p++, q++) *q = *p;。 セキュリティ上の重大な脆弱性を引き起こしたバッファ オーバーランのバグのほとんどは、このようなコードが原因でした。私自身の実践では、 and を使用する++--、コードがきつすぎたり、トリッキーすぎたり、難解すぎたりする傾向があることがわかりました。だから、規律の問題として、私はそれらをもう使用しません。

編集:この回答は引き続きビューを取得するため、 Nopeからのコメントを含めました。彼のコメントにも引き続き賛成してください:)

于 2010-06-09T04:42:39.477 に答える
88

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

于 2012-09-18T11:17:59.223 に答える
28

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

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

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

しかし、誰かがやってきて空間を動かしているのは何ですか?

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

これで、最初に j がインクリメントされ、次に i が j の新しい値に追加され、結果として 1 が警告されます。

これは、次のようにすることで簡単に解決できます

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

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

于 2010-06-08T18:54:11.107 に答える
13

個人的にはi++、ライン上などのステートメントを単独で配置することを好みます。それらをより大きなステートメントの一部として含めると、その行が何をしているのかわからない人にとっては混乱を招く可能性があります.

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

value = func(i++ * 3);

私はこれを行います:

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

i++これはまた、人々が方法や作業を覚える必要がないことを意味し++i、非常に多くの優先ルールを適用する必要がなくなります。

于 2010-06-08T18:47:04.260 に答える
9

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

実装する「機能的な」方法は、副作用なしで変数を明示的に再割り当てしてから使用することです。i++i = i + 1

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

于 2013-03-13T22:09:16.020 に答える
7

JSLint フレンドリーなループ

for (i = 0; i < 10; i += 1) {
    //Do somthing
}
于 2015-04-16T22:33:44.950 に答える
4

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

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
于 2013-11-01T16:27:05.667 に答える
3

プレインクリメント: ++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
于 2013-03-13T21:57:35.900 に答える