2016-08-19 4 views

答えて

5

はい。

プロパティが値を持っていたし、今はそれが何を持っていないしたいときは、通常、それらの選択肢があります。

削除:

delete obj.prop; 

問題:それはvery big performance impactsを持っています。 で、他にもうまく設計されたJSプログラムで最も大きなパフォーマンスを誇るものです。それを追跡し、パフォーマンスの問題は、(影響が単に配置されていないことに注意して、プロパティを削除するだけでなく、あなたがメソッドを呼び出すときなど、後でオブジェクトの他のプロパティを読み書きどこどこ)ときにそれを使用することはありませんしてください。

をnullに値を設定する:値の予想されるタイプが「オブジェクト」(または時には「文字列」)である場合

obj.prop = null; 

これは意味論的意味をなします。 null(つまりオブジェクトなし)とundefined(つまり値が設定されていません)の間に意味的な違いがあります。

はNaNに値を設定します。

obj.prop = NaN; 

あなたは数字以外のもののためにこれを使用しません(しかし、それは特定のユースケースに応じて、感覚のトンを作ることができます)。

は未定義に値を設定します。

obj.prop = undefined; 

これは、他のほとんどのケースでは最良の選択です。また、それはoptions.something === undefinedをチェックすることです、引数または引数のプロパティが設定されているかどうかをテストするために、通常は正しい方法とうまく果たしています。すでに@Denysにより詳細に説明のように

+0

私はDELETE' 'のパフォーマンスへの影響を知りませんでした。他のユースケースに感謝します。ありがとう! – kawty

1

が見える:)

私はthis.x = null typeof演算xが、私はこのためundefinedを使用せたobjectになります使用している場合。

あなたが唯一の理論的な落とし穴ですundefinedの値を変更することができECMA 5の前に問題が発生しました。

undefined = 'myEx'; 

function myEx(){ 
 
    
 
    this.x = undefined; 
 
    
 
    function isXExisting(){ 
 
     return typeof this.x !== "undefined"; 
 
    } 
 
    
 
    function squareX(){ 
 
     switch(typeof this.x){ 
 
      case 'undefined': return undefined; 
 
      case 'string': return this.x + this.x; 
 
      case 'number': return this.x * this.x; 
 
      case 'object': return this.x; 
 
      default: return undefined; 
 
     } 
 
    } 
 
    
 
    function setX(value){ 
 
     this.x = value; 
 
    } 
 
    
 
    function getX(){ 
 
     return this.x; 
 
    } 
 

 
    function resetX(){ 
 
     this.setX(undefined); 
 
    } 
 
     
 
    return{ 
 
     isXExisting: isXExisting, 
 
     setX: setX, 
 
     getX: getX, 
 
     squareX: squareX, 
 
     resetX: resetX 
 
     } 
 
    } 
 

 
var y = new myEx(); 
 
console.log(y.isXExisting(), y.getX(), y.squareX()); 
 
y.setX(3); 
 
console.log(y.isXExisting(), y.getX(), y.squareX()); 
 
y.setX('xX'); 
 
console.log(y.isXExisting(), y.getX(), y.squareX()); 
 
y.resetX(); 
 
console.log(y.isXExisting(), y.getX(), y.squareX());

+0

なぜ 'undefined'を使用していますか?私は 'ヌル'が価値の欠如を表すのに適していると思う。 – kawty

+0

@kawty我々は '変数typeof'とnull'なので、応答のための' type'が – sabithpocker

+0

object' 'のおかげを持ち'としてnull'なので '上好ましいundefined''応じて作用検索する場合。もう1つの質問ですが、なぜ値をチェックするのに 'typeof'を使いたいのですか? 'this.x === null'で十分ではなく、' null'を使用していますか? – kawty

関連する問題