2011-10-12 20 views
3

jslintを使用してJavaScriptコードを確認し始めました。それは私が、私はこれはいいショートカットを思った&null安全なメソッド呼び出し、良いか悪い?

result = value || defaultValue; 

result = value ? value : defaultValue; 

を交換しなければならない、そして潜在的にヌルの変数を上のメソッド呼び出しに原理を応用してみましたので、代わりに示されている:

if (arg) { 
    arg.doSomething(); 
} 

私は試しました:

arg && arg.doSomething(); 

後者はブラウザで正常に動作しますが、jslintは「代入や関数呼び出しが必要で、代わりに式を見た」と不平を言っています。

最後のステートメントが悪い、間違っている、危険な、またはjslintが過剰保護されていますか? var dummy = arg && arg.doSomething();を使用すると、メッセージが消えてしまうだけで愚かに見えます。

+0

私はCrockfordが「ガード」と呼ばれると思って、あなたの例のようにその使用を奨励しました。たぶん彼はjslintを使わないだろうか? – RobG

+0

@RobG:おそらく彼は表現の中でガードを使うだけです。 :) –

+0

それは間違いではありません。これはClosure Compilerがhttp://closure-compiler.appspot.com/homeを縮小するときにも実行します。 (if節を小さくしてみてください。) – pimvdb

答えて

3

JSLintは、最高の状態で、この警告を考慮しなければならない(が、その後、JSLintはあからさまエラーから警告を区別しません)、間違いないエラー  —が、JSLintは異なる場合がありクロックフォードのコーディングスタイルの基準を、施行うとしていることを覚えておいてくださいあなた(彼らは確かに鉱山から変化する);私はすぐにこの特定の条件のオプションが表示されませんが、より多くの制御を提供するJSHintをチェックアウトすることがあります。

あなたのarg && arg.doSomething()は問題ありませんが、多少進歩しているため、コードのメンテナンスを行う人が減ります。私はそのように使用しません。私は表現の中でそれを使用しますが、それ自身では使用しません。使用するかどうかはあなた次第ですが、危険ではなく、やや不透明です。

+0

確かに。私はあまりパターンを使用しないと言っているわけではありませんが、私は 'if(expr){}'を使って納得することをお勧めします。 – jAndy

+0

ひとつのステートメントで角括弧を省略することもできるので、 'arg && argS.OnSomething();'は 'if(arg)arg.doSomething();'よりもはるかに短いものではありません。 – Kapep

+0

jslintもそれについて文句を言っています:期待された '{'そして代わりに 'arg'を見た。 if/while/etcコンストラクトは{}内の単一の文でもラップする必要があります。 – andypandy

関連する問題