このコードは、すべてのブラウザで正常に動作しますか?それについて仕様書には何かノートがありますか?表現の結果はどうなりますか?
var attributes = this._attributes ? this._attributes : (this._attributes = []);
e.e.e. * this._attributes *が初期化されていない場合、新しい配列が作成され、その配列は* this._attributes *と属性に割り当てられます。
このコードは、すべてのブラウザで正常に動作しますか?それについて仕様書には何かノートがありますか?表現の結果はどうなりますか?
var attributes = this._attributes ? this._attributes : (this._attributes = []);
e.e.e. * this._attributes *が初期化されていない場合、新しい配列が作成され、その配列は* this._attributes *と属性に割り当てられます。
この表現には何も特別なものはありません。メジャーなブラウザでも問題はありません。あなたは||
operatorを使用して、それを短縮することができます:すべてのブラウザで動作します
var attributes = this._attributes || (this._attributes = []);
いいえ、残念ながら_attributes
が未定義の場合はアクセスできません。だから、typeof attributes != "undefined"
をチェックする必要があります。
確かにそれにアクセスできます。未定義の変数を参照しようとしていない 'undefined'を返すだけです。未定義のプロパティーはアクセス時に' undefined'を返します。 –
未定義フリー変数と未定義プロパティへのアクセスには違いがあります。 OPがやっていることは大丈夫です。 –
を。
実際に私がなぜない何らかの理由が表示されない
var attributes = this._attributes || (this._attributes = []);
...とterserを作ることができます。私はそのように書いているとは思わないが、私は副作用のある課題のファンではないが、構文的には問題ない。
これは正常に動作します。オブジェクトの未定義のプロパティにアクセスすると、そのアクセスはundefined
を返します。あなたが気を付けなければならないことは、 を_attributes
属性に拡張することです。これはあなたを苦労させますが、は決してネイティブプロトタイプを拡張するためです。スペックから
:
8.12.2 [[GetPropertyメソッド](P)
- は支柱がOの[[GetOwnProperty]]内部メソッドを呼び出した結果としますプロパティ名がP.
- propが不定でない場合は、propを返します。
- Oの[[Prototype]]内部プロパティの値にします。
- protoがnullの場合は、未定義を返します。
- ので、それはそれを返す場合、戻り引数P.
とプロトの[[GetPropertyメソッド]]内部メソッドを呼び出した結果は、だから、オブジェクトのプロパティを持っているかどうかをチェックし、そうでない場合には、検索プロトタイプチェーンの上に何かがある場合はそれを返し、それ以外の場合はundefined
を返します。
ありがとう!あなた方はさらに良いです。 –
@alex:あなたの答えを見たことのない '||'ビットを追加しましたが、最初にそのビットを取得しましたので、同情をupvote :) –