Javascript 右侧作业-这怎么可能?
我有一些基本的angular code抓取导航菜单,用于登录和注销用户,并将菜单存储在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
$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代码>正在传递对象引用。。。覆盖最初的空对象。看起来我今天学到了一些东西。非常感谢。我很高兴这有帮助!