Переименование объекта недвижимости - PullRequest
0 голосов
/ 06 марта 2012

У меня есть вопрос относительно того, почему следующее возвращает несовместимые значения

(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 ));​

Я бы подумал, что оба ДОЛЖНЫ возвращать одно и то же значение true?

Может кто-нибудь объяснить, почему это происходит? Они считаются различными свойствами?

Ответы [ 2 ]

3 голосов
/ 06 марта 2012

Вы не переименовываете переменную, вы присваиваете значение другой.

это как:

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

print $foo; // true
print $bar; // false
0 голосов
/ 06 марта 2012

Происходит следующее: значение ab.cool.nice.funky.sweet копируется в reVal.Этого не произойдет, если вы попытаетесь скопировать ab.cool.nice.funky в reVal, поскольку оба символа будут ссылаться на один и тот же объект.

Эта дифференциация является продуктом обработки типов значений, таких как логические или целые числа, в отличие от ссылочных типов, которые в javascript в основном означают объекты.

Проверьте это для получения дополнительной информации: http://docstore.mik.ua/orelly/webprog/jscript/ch11_02.htm

...