2016-11-20 4 views
0

私はいつもこの問題を抱えています。私は常に変数が存在するかどうかをチェックしなければならず、そうでなければエラーが出ます。以下のコードのようにjavascriptでエラーが発生することなくプロパティの安全性を使用

if (something) { 
    var data = { 
    date: moment() 
    }; 

} 

var x = new F({ 
    param: param, 
    date: data.date || null //<-- still error 
}) 

何か変数が存在する可能性がありますが、私は安全にdate.dateを使用できません。私はこの問題を解決するために新しい変数を作成する必要があります。同様

if(data){ date = data.date } しかし、それより短い解決法はありますか?

+0

日付:(データ|| {})。日付|| null // - エラーはありません。しかし、悪く見える:D。 –

+0

はい、問題ですが、必要以上に難しくなっています。時には 'data'をインスタンス化するだけでなく、常にそれを行い、条件が合格すればプロパティを追加します。そうすれば、 'data'が' undefined'であることからあなたを守る必要はなく、あなたはそれが持っているかどうかだけを気にします。実際、あなたは '||その場合、 'date'プロパティがなければ' undefined'を取得するだけです。 – vlaz

答えて

0

これは、somethingがfalseと評価されたときに変数データが​​定義されていないために発生します。その場合、プロパティdateにアクセスしようとすると、参照エラーが発生します。解決策は常に空のオブジェクトとしてデータ変数を初期化することです:あなたが実際に{}としてデータを初期化するときに、オブジェクト以外のタイプのプロパティにアクセスしようとすると、この方法が唯一のTypeErrorsを防ぐために、動作することを

var data = {}; 

if (something) { 
    data.date = moment(); 
} 

var x = new F({ 
    param: param, 
    // now data is defined, so we can safely check if the date property exists on it: 
    date: data.date || null 
}) 

注意。

+0

'プロパティの日付にアクセスしようとすると、参照エラーが発生します.'それはTypeErrorです - ' date'は 'undefined'になります。 – vlaz

+0

本当ですか?ドット記法を使用してプロパティにアクセスしようとすると、スクリプトは参照エラー: 'Uncaught ReferenceError:data not defined'と壊れてしまいます。 typeErrorは、 'data'が定義されているときに発生しますが、' Object'型ではありませんが、 'null'としましょう。次に、そのプロパティにアクセスしようとします。それは言うでしょう: 'Uncaught TypeError:プロパティ 'date' of nullを読み取れません。 –

+0

これは、' data'を宣言しないと起こります。しかし、あなたが 'var data'を持っているので、宣言は関数の先頭に(そして' if'の外に)持ち上がるので、 'data'は宣言されますが、' undefined'の値を持ちます。 – vlaz

関連する問題