2016-10-27 16 views
-3

私はJavaScriptを初めて使用しているので、私に負担してください。そして、改善のためにこのコードを与えられました。私はあなたがコードで見ているいくつかの懸念や問題を列挙するように言われました。これまでのところ、私がいることを参照してください。typeof演算データならば私はJavaScriptの条件コードを改善したいと思います

が文字列に対してオブジェクトを比較するために、二重等しい等価演算子を使用して

最善の解決策ではないかもしれない== 'オブジェクトの

もしてください!想定すると仮定しますPeopleFactoryはグローバルに定義されています

コードを自由に選ぶことができます。非常に役に立ちます。現在の状態であなたの質問 おかげで

var Person_D = function Person_D(name) { 
    //assume PeopleFactory is defined globally 
    //getDetailsAsync returns either null or a record with specific name. 
    PeopleFactory.getDetailsAsync(name, function(data) { 
    if (typeof data !== 'object') { 
     throw new Error('No record found for this individual.'); 
    } 

    this.name = data.name; 
    this.age = data.age || 'No age data available.'; 
    this.eyeColor = data.eyeColor || "This individual's eye color data is not listed."; 
    this.height = data.size.height || "No height specified."; 

    }); 

    return this; 

} 

var personD = new Person_D('Jana'); 

console.log(personD.name); 
+0

'typeof演算data'はオブジェクトではありません。これはインタビューの質問ですか? – JJJ

+5

[コードレビュー](http://codereview.stackexchange.com/)に所属しています(どこにいても)。それを投稿する前に、[Asking](http://codereview.stackexchange.com/help/dont-ask)ガイドラインをお読みください。 –

+0

typeofを使用する際の問題は何ですか? – epascarello

答えて

1

しかし、すべての場合にエラーが発生しますコード内の少なくとも3つのバグがありますが、「答え」に広すぎます。

  1. コードは、非同期であり、PeopleFactory.getDetailsAsyncを通してPerson_Dの特性をロードするが、同期アクセスpersonD.name

  2. コードでthisを使用してコールバックにプロパティを割り当て、thisPerson_Dオブジェクトを参照していないようにします。

  3. if(typeof data !=='object')は、実際には常に"object"truetypeof null理由とtypeof new Object()両方の結果になります。代わりに=== nullを使用してください。 (ただ、それはのように、おそらく正しい出力が意図した動作しながら、どのようにコードべき仕事上の仮定を作っていない)

可能な修正:

var Person_D = function Person_D(name) { 
    var self = this; 
    //assume PeopleFactory is defined globally 
    //getDetailsAsync returns either null or a record with specific name. 
    PeopleFactory.getDetailsAsync(name, function(data) { 
    if (data === null) { 
     throw new Error('No record found for this individual.'); 
    } 

    self.name = data.name; 
    self.age = data.age || 'No age data available.'; 
    self.eyeColor = data.eyeColor || "This individual's eye color data is not listed."; 
    self.height = data.size.height || "No height specified."; 
    console.log(self.name); 
    }); 

    return this; 
} 

var personD = new Person_D('Jana'); 
+0

'if(typeof data!== 'object')は完全に有効なjsであり、実際に型比較を行う最良の方法です。' no、それは最善ではありません: 'typeof null'は'あなたはそれが有効だと思うだろうかと疑う。 – vlaz

+0

@vlaz Hmm良いキャッチ、私はヌルに対して厳密な型チェックのユースケースに遭遇したことがないので、おそらくその変わったことを忘れていました。それを編集します。 – tcooc

関連する問題