2012-03-06 23 views
0

私は両方とも同じ値trueを返すべきであると考えているだろう、なぜ次戻り一貫性のない値オブジェクトのプロパティの名前変更

(function(ab, $, undefined) { 

    ​ab.cool = { 
     nice: { 
      funky: { 
       sweet: false 
      }  
     } 
    }; 

    var reVal = ab.cool.nice.funky.sweet; 
    reVal = true; 

    console.log(reVal); //equals true 
    console.log(ab.cool.nice.funky.sweet); //equals false 

}(window.ab = window.ab || {}, jQuery));​ 

に関する質問がありますか?

これがなぜ発生するのか説明してもらえますか?それらは異なる特性と考えられていますか?

答えて

0

ab.cool.nice.funky.sweetの値がreValにコピーされるということです。両方のシンボルが同じオブジェクトを参照するため、ab.cool.nice.funkyreValにコピーしようとすると、これは起こりません。

この差別化は、ブール値や整数などの値型をjavascriptでは基本的にオブジェクトを意味する参照型とは異なる方法で処理した結果です。詳細は

チェックこれを:http://docstore.mik.ua/orelly/webprog/jscript/ch11_02.htm

+0

ありがとう。 'var reVal = ab.cool.nice.funky;'を使って 'reVal.sweet = false;'を使う方が良いでしょう。 – Andy

+0

両方のシンボルから同じ値を制御できるようにしたい場合は、それが解決策です。 –

+0

広範囲に言えば、混乱を避けて可読性を高めるために同じオブジェクトへの参照を最小限に抑えることがベストプラクティスです。したがって、オブジェクトへの参照が1つあれば、絶対に必要としない限り別のオブジェクトを作成しないでください。クロージャの外側の値にアクセスする必要がある場合は、クロージャの上にそれを公開し、その参照をコピーしないでください。 –

3

変数の名前を変更しないで、別の変数に値を割り当てます。

それはようなものだ:何が起こっている

$foo = $bar = true; 
$bar = false; 

print $foo; // true 
print $bar; // false 
+0

それを得る:) brainfartを - 助けてくれてありがとうしかし、悪臭のために申し訳ありません。説明のために – Andy

関連する問題