24

最近、JSLint に関する私のブログ投稿の 1 つで、JSLint が次のようなエラーをスローした理由を尋ねるコメントを受け取りました。

s === "test" ? MyFunc() : MyFunc2();

生成されたエラーは次のとおりです。

「代入または関数呼び出しが必要でしたが、代わりに式が見られました。」

明らかに、JSLint はここで次のような代入を期待しています。

var y = (s === "test") ? MyFunc() : MyFunc2();

しかし、最初の例の問題はあまりわかりません。三項演算子は割り当てにのみ使用する必要があるというのは本当ですか?

私はJSLint.comで何も見ることができませんでしたし、本 JavaScript: The Good Parts にも明らかなものはありませんでした。また、コミュニティ フォークJSHintでも同じエラーが報告されています。

誰?

4

1 に答える 1

35

表現です。と書くのと同じです。

0 === 1;

すぐに副作用があり、悪いと見なされる式を書いています。

一般に、式は副作用のない役に立たないステートメントです。単に行う方が良いと考えられています

if (s === "test") {
  MyFunc();
} else {
  MyFunc2();
}

それとは別に、それは完全に堅実な構文です。個人的には、簡潔な 3 進数を an の代わりに書くのifは良くなく、代入のみに使用する方がよいことに同意します。

簡潔さのために (ab) 使用されてきた他の省略表現

someCondition && doMagic(magic);
someCondition || doMagic(magic);

繰り返しますが、これらを式としてのみ使用する場合、これらを使用するとロジックがわかりにくくなり、コードの保守が難しくなるため、これらは悪い形式と見なされます。

JSHintには、このためのオプションがありますexprチケットを見る

ランニング:

/*jshint
  expr: true
*/

var s, MyFunc, MyFunc2;
s === "test" ? MyFunc() : MyFunc2();
0 === 1;

通過します

于 2011-06-06T07:31:22.553 に答える