2011-06-22 8 views
3

2つの変数を同じ値(false)に宣言しようとしています。変数値を設定するための略語

は私が

var $a= {border:false 
,frame:false}; 

または交互

border=false;frame=false; 

が、私は両方の値を宣言することができますが、より良い方法です(ほとんどすべてのオブジェクトに私は、プロトタイプ、など)すべての場所でこれを実行する傾向があります同時に?あなたが値を設定する場合、両方の変数が宣言されている場合は、

var border = frame = false; 

答えて

3

次のことができます(例えば、コードゴルフ溶液)

+0

境界線がフレームへのポインタになるのは、ちょうど好奇心の中で最短のバージョンを想定していますか? – Alex

+1

@Alex:いいえ、プリミティブは常に値によって渡されます。オブジェクトがある場合は、両方とも同じオブジェクトを指します。実際に良い点。 –

2

あなたはこれを行うことができます。これは一種の風変わりですが、それは動作します:

var frame, 
    border = frame = false; 

(これは私が考える得ることができます最短だろう)

は、それが良いですか?私はそうは思わないし、あなたは本当に多くを節約しない。もっと読むことができます

実際にはいくつかの組み合わせがありますが、変数名や値を繰り返さないと実行できません。例えば。あなたも行うことができます:もちろん

var frame = false, 
    border = frame; 

プリミティブ値(すなわちブール、(リテラル)の番号、(リテラル)の文字列)については、この唯一の作品。オブジェクト(配列を含む)を扱う場合、両方の変数は同じオブジェクトを参照します。この場合、あなたは本当にそれらを個別に初期化する必要があります。

var frame = {}, 
    border = {}; 

// DON'T DO THIS: 
var frame, 
    border = frame = {}; 

更新を、私はない作業var border = frame = false;がない理由を説明する必要性を感じるので:

varここで推移されていないとしこの式は実際には右から左に評価されます。まず、falseframeに割り当てられます。これはスコープチェーンで検索され、最悪の場合はグローバルになります。次に、frameの値がローカル変数borderに割り当てられます。

+6

をこれは、 'frame'グローバルに、または少なくとも'それは事前に宣言されていなかったことをborder'と同じスコープで定義することはありません。 –

1

は考えてみましょう:

var border, frame; 

border = frame = false; 
関連する問題