Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/470.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 右侧作业-这怎么可能?_Javascript_Javascript Objects - Fatal编程技术网

Javascript 右侧作业-这怎么可能?

Javascript 右侧作业-这怎么可能?,javascript,javascript-objects,Javascript,Javascript Objects,我有一些基本的angular code抓取导航菜单,用于登录和注销用户,并将菜单存储在$localStorage中,然后在用户登录/注销时将其切换到$rootScope,等等 以下是该代码的简化版本,用于本问题 似乎其中一行代码实际上会将左侧指定给右侧 $localStorage.navigation = {}; $rootScope.nav = {}; // save the nav menus in local storage $localStorage.navigation.logged

我有一些基本的angular code抓取导航菜单,用于登录和注销用户,并将菜单存储在
$localStorage
中,然后在用户登录/注销时将其切换到
$rootScope
,等等

以下是该代码的简化版本,用于本问题

似乎其中一行代码实际上会将左侧指定给右侧

$localStorage.navigation = {};
$rootScope.nav = {};

// save the nav menus in local storage
$localStorage.navigation.loggedIn = "nav menu json";    

// use local storage to set the rootscope
$rootScope.nav = $localStorage.navigation;  

/*  should be..
    $rootScope.nav = {loggedIn:'nav menu json'};
    $localStorage.navigation = {loggedIn:'nav menu json'};
*/

// set the nav menu - Right-hand-assignment???
$rootScope.nav.current = $localStorage.navigation.loggedIn;

/*  should be..
    $rootScope.nav = { loggedIn:'nav menu json', current: 'nav menu json' };
    $localStorage.navigation = { loggedIn:'nav menu json' };
*/

console.log($rootScope.nav.current);    // 'nav menu json' as expected
console.log($localStorage.navigation.current);    // 'nav menu json', WHAT??!!

/*  actually..
    $rootScope.nav = { loggedIn:'nav menu json', current: 'nav menu json' };
    $localStorage.navigation = { loggedIn:'nav menu json', current: 'nav menu json' };
*/

这里到底发生了什么事?

因为
$localStorage.navigation
是一个对象而不是一个原语(
Boolean
Number
String
),这一行指定了一个引用,而不是
$localStorage.navigation
$rootScope.nav

$rootScope.nav = $localStorage.navigation;
此时,
$localStorage.navigation
$rootScope.nav
是对完全相同对象的两个引用。这一行:

$rootScope.nav.current = $localStorage.navigation.loggedIn;
正在将原语值
$localStorage.navigation.loggedIn
分配给
$rootScope.nav.current
,但由于
$localStorage.navigation
$rootScope.nav
是完全相同的对象,
$localStorage.navigation.current
引用的值与
$rootScope.nav.current
相同


需要明确的是,右侧分配是不可能的。

$rootScope.nav=$localStorage.navigation正在传递对象引用。。。覆盖最初的空对象。看起来我今天学到了一些东西。非常感谢。我很高兴这有帮助!