为什么这个Javascript示例复制变量值而不是通过引用传递?

时间:2010-12-14 15:38:41

标签: javascript pass-by-reference

Javascript好的部分中,它声明:

alt text

所以我希望以下代码示例输出 1001 ,因为“对象永远不会被复制但是通过引用传递”,那么为什么输出 0000

var page_item = {
  id_code : 'welcome',
  title : 'Welcome',
  access_groups : {
      developer : '0010',
      administrator : '0100'
  }
};
page_item.access_groups.member = '0000';
var member = page_item.access_groups.member;
member = '1001';

$('p#test').html(page_item.access_groups.member); //should be "1001" but is "0000"

加了:

@Gareth @David,谢谢,这是我试图在这个例子中展示的作品:

var page_item = {
  id_code : 'welcome',
  title : 'Welcome',
  access_groups : {
      developer : '0010',
      administrator : '0100'
  }
};
var page_item2 = page_item;
page_item2.access_groups.developer = '1001';

$('p#test').html(page_item.access_groups.developer); //is '1001'

3 个答案:

答案 0 :(得分:4)

不要想到C ++上下文中的pass-by-reference,因为它不一样。

var member = page_item.access_groups.member // Sets member to this value
member = '1001'; // Now sets it to another value

如果在字符串上有一个更改它们的方法,那么:

member.removeLastLetter();

会改变page_item.access_groups.member。但是,使用=,您正在更改变量的引用,而不是之前引用的对象

答案 1 :(得分:1)

因为page_item.access_groups.member是字符串而不是对象。

答案 2 :(得分:0)

这可能会受到JS-Gurus的影响,但基本上就是这样:

通过引用传递对象 字符串(数字等......基本上是1维变量)按值传递。

我确实尝试了解有关数据类型的冗长解释,但我认真地需要完成一些工作,并且没有时间仔细研究它。