2010-12-14 8 views
1

このコードは、すべてのブラウザで正常に動作しますか?それについて仕様書には何かノートがありますか?表現の結果はどうなりますか?

var attributes = this._attributes ? this._attributes : (this._attributes = []); 

e.e.e. * this._attributes *が初期化されていない場合、新しい配列が作成され、その配列は* this._attributes *と属性に割り当てられます。

答えて

3

この表現には何も特別なものはありません。メジャーなブラウザでも問題はありません。あなたは|| operatorを使用して、それを短縮することができます:すべてのブラウザで動作します

var attributes = this._attributes || (this._attributes = []); 
+0

ありがとう!あなた方はさらに良いです。 –

+0

@alex:あなたの答えを見たことのない '||'ビットを追加しましたが、最初にそのビットを取得しましたので、同情をupvote :) –

0

いいえ、残念ながら_attributesが未定義の場合はアクセスできません。だから、typeof attributes != "undefined"をチェックする必要があります。

+0

確かにそれにアクセスできます。未定義の変数を参照しようとしていない 'undefined'を返すだけです。未定義のプロパティーはアクセス時に' undefined'を返します。 –

+0

未定義フリー変数と未定義プロパティへのアクセスには違いがあります。 OPがやっていることは大丈夫です。 –

2

を。

実際に私がなぜない何らかの理由が表示されない

var attributes = this._attributes || (this._attributes = []); 
0

...とterserを作ることができます。私はそのように書いているとは思わないが、私は副作用のある課題のファンではないが、構文的には問題ない。

0

これは正常に動作します。オブジェクトの未定義のプロパティにアクセスすると、そのアクセスはundefinedを返します。あなたが気を付けなければならないことは、_attributes属性に拡張することです。これはあなたを苦労させますが、は決してネイティブプロトタイプを拡張するためです。スペックから

8.12.2 [[GetPropertyメソッド](P)

  1. は支柱がOの[[GetOwnProperty]]内部メソッドを呼び出した結果としますプロパティ名がP.
  2. propが不定でない場合は、propを返します。
  3. Oの[[Prototype]]内部プロパティの値にします。
  4. protoがnullの場合は、未定義を返します。
  5. ので、それはそれを返す場合、戻り引数P.

とプロトの[[GetPropertyメソッド]]内部メソッドを呼び出した結果は、だから、オブジェクトのプロパティを持っているかどうかをチェックし、そうでない場合には、検索プロトタイプチェーンの上に何かがある場合はそれを返し、それ以外の場合はundefinedを返します。

関連する問題