3

2 つの変数を同じ値 ( false ) に宣言しようとしています。

私はこれをあらゆる場所で行う傾向があります (たとえば、私がプロトタイプを作成するほぼすべてのオブジェクトで)

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

または交互に

border=false;frame=false;

両方の値を同時に宣言できるより良い方法はありますか? (例: コード ゴルフ ソリューション)

4

3 に答える 3

3

値を設定するときに両方の変数が宣言されている場合は、それが可能です。これはちょっと風変わりですが、機能します:

var frame, 
    border = frame = false;

(これはあなたが得ることができる最短のものだと思います)

いいですか?私はそうは思いません、そしてあなたは本当に多くを節約しません。より読みやすいです

var frame = false, 
    border = false;

実際には、さらにいくつかの組み合わせを実行できますが、変数名または値のいずれかを繰り返さずに実行することはできません。たとえば、次のこともできます。

var frame = false, 
    border = frame;

もちろん、これはプリミティブ値(つまり、ブール値、(リテラル)数値、(リテラル)文字列)に対してのみ機能します。オブジェクト(配列を含む)を扱う場合、両方の変数が同じオブジェクトを参照します。この場合、実際にはそれらを個別に初期化する必要があります。

var frame = {}, 
    border = {};

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

更新var border = frame = false;します。なぜ機能しないのかを説明する必要があると感じたためです。

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

于 2011-06-22T19:58:39.117 に答える
2

あなたはこれを行うことができます:

var border = frame = false;
于 2011-06-22T19:47:16.167 に答える
1

検討:

var border, frame;

border = frame = false;
于 2011-06-22T20:03:11.203 に答える