2013-08-23 100 views
4

在那里,就这样发生了一件奇怪的事..JavaScript变量初始化

通常我给你我的全局变量是这样的:

orders = []; 
pOrders = []; 

但我很懒惰,只是写道:

orders = pOrders = []; 

它应该是相同的,不应该吗?

显然不是因为数组pOrder还包含数组orders数据。我坐了15分钟寻找我的代码中的错误,但找不到任何,所以我只是试着写变量,因为我通常会和它的工作。为什么会发生?

在PHP中,逻辑将是相同的,但JavaScript看起来行为不同。

请任何人都可以给我提供一些信息或知识..

+1

请注意,Java和JavaScript是完全不同的语言。 – Pointy

+0

谢谢,我意识到这一旦发生,我的问题是,为什么在PHP中它是不同的? PHP将分配每个数组作为一个空白数组,而不是引用第一个与第二个... – Jacques

+0

@Jacques由PHP的制造商设计的决定。他们希望他们的变量初始化能够像那样工作。 – Renan

回答

7

在第二个例子中,你明确地分配完全相同的数组实例,以两个独立的变量。只涉及一个阵列,而在第一个案例中有两个阵列。

我会有些惊讶地发现,PHP真的会把这两段代码看作是同一件事。

+0

谢谢,我意识到这一旦发生,我的问题是,为什么在PHP是不同的? PHP会将每个数组分配给一个空数组,并且不会引用第一个数组和第二个数组...... – Jacques

+0

那么PHP真的可以这样工作吗?哇。 – Pointy

5

你写有最后那个代码是一样的:

orders = []; 
pOrders = orders; 

所以,现在你有两个变量,它们是同一个数组引用。这就是为什么你正在经历这种行为。

当,而不是你做的,你在你的第一个例子:

orders = []; 
pOrders = []; 

然后你有两个完全独立的和不同的阵列。

2

您分配了两个变量来引用相同的数组实例。

1

要看看大家是指“同一阵列实例”,在浏览器中运行以下JavaScript:

orders = pOrders = []; 
orders.push("hello"); 
pOrders.push("world"); 
console.log(orders); 
console.log(pOrders); 

检查控制台输出,两个消息都会说[“你好”,“世界”。