1

この構造がどのように呼ばれているかはわかりませんが、トリマーかもしれません。

someCondition ?  function1() : function2();

JsHint は代入または関数を期待していたが、代わりに式を見たと言っています。それで、すべてのブラウザで正しく動作するのでしょうか?

4

2 に答える 2

2

これは条件付き (三項) 演算子?:と呼ばれ、実際には次と同等です。

 if (someCondition) {
     function1();
 }
 else {
     function2();
 }

JsHint が気に入らないという事実は、それが有効な構文ではないことを意味するのではなく、単にスタイルが悪いことを意味しますが、それでも機能します。

于 2013-11-08T12:14:26.463 に答える
1

あなたはそれを自分で試すことができます

true ? console.log('a') : console.log('b')

これは三項演算子です。JSHint が伝えていることは、このような三項演算子を使用すると混乱する可能性があるということです。JSHint はかなり独断的で、コードを壊す可能性のあることだけでなく、作成者が気に入らなかったことについても警告します。

より無駄のない (意見のない) リンターが必要な場合は、最近リリースされた ESLintを試してください。

一般的に言えば、関数呼び出しではなく代入で三項演算子を使用する必要があります。

私のアプローチは次のとおりです。

if (something) {
    fn1();
} else {
    fn2();
}

割り当ての場合、これで問題ありません。

var foo = something ? 'foo' : 'bar';

最初の例の可能な代替案は次のとおりです。

var foo = {

    fn1: fn1,
    fn2: fn2
};

foo[bar ? 'fn1' : 'fn2']();

ただし、これは、ほとんどの実際のシナリオではおそらくさらに混乱を招きます。

于 2013-11-08T12:14:34.753 に答える