6

変数にフィールドがなく、ユーザーがこの変数またはその変数にこのプロパティまたはそのプロパティがないという警告が表示される場合に、この問題が発生します。単純なケースでは、それは非常に簡単です。

if(field)
  doSomething(field.subField);

しかし、経験的な状況では、私は自分自身がこのばかげた過剰チェックに到達していることに気づきました。

if(!data 
  || !data.records 
  || !data.records[0] 
  || !data.records[0].field 
  || !data.records[0].field.id)
    return null;
doSomething(data);

つまり、さあ、パイプっぽいものは、私が開発者ではなく配管工のように見えます。ですから、私のチェックは十分ではありますが、少しやり過ぎかもしれないと非常に強く感じています。チェックを実行するタイミングに関するJSの規則はありますか?

4

2 に答える 2

6

私は物議を醸す意見を出すつもりです。

nullJavaScriptでは、これが現実的に発生してはならない場所で値をチェックする必要はありません。言い換えると、ネストされた各プロパティのnullをチェックするという考えは少しやり過ぎであり、スクリプトを複雑にするだけです。

私の経験では、スクリプトエラーを発生させることを学びました。これは、Cコードやデータベースコードを書いている人にとっては直感に反します。処理nullされていない場合、サーバーがクラッシュしたりデータが破損したりする可能性がありますが、スクリプトの世界では、エラーをすぐに見つける方がよいでしょう。予期しないことが発生したことを示すことなくページが読み込まれ続けると、後でユーザーがボタンをクリックしたりフォームを送信したりすると、奇妙なバグの形で表示されます。

私のアドバイス

あなたがそれについて何かをする気があるかどうかnull だけをチェックしてください。null何か問題が発生した場合にを返す可能性のあるWebサービスがある場合は、それを確認してエラーメッセージを表示します。null以外の値が返される場合は、それが有効な値であると想定して続行します。スクリプト全体にヌルチェックを散らかす理由はありませんが、実際にはプログラムに実際のメリットはありません。

于 2013-01-17T17:34:30.610 に答える
2

通常、オブジェクトが存在する場合は、それを使用可能にする基本的なプロパティのセットが常にあることを確認します。

たとえば、変数に値がある場合、それは空であっても常に配列であるプロパティをdata持つオブジェクトになります。records配列に何かが含まれている場合、それは常にfieldプロパティを持つオブジェクトである必要があります。これは、常にプロパティを持つオブジェクトですid。これにより、チェックが次のように削減されます。

if (!data || data.records.length == 0) {
  return null;
}
于 2013-01-17T17:28:49.857 に答える