是否按定义的顺序处理Javascript数组的元素?

时间:2011-03-29 23:34:38

标签: javascript

例如:

var a = [];
function p(x) { a.push(x); }

[[p(1),p(2)],p(3),[p(4),[p(5)]],p(6)]

a == [1,2,3,4,5,6] // Always true?

是'a == [1,2,3,4,5,6]'定义的行为?它可以依赖吗?

3 个答案:

答案 0 :(得分:5)

  

是否按定义的顺序处理Javascript数组的元素?

是的。

  

是'a == [1,2,3,4,5,6]'定义的行为?它可以依赖吗?

不,equals运算符在比较对象时执行引用相等。

答案 1 :(得分:2)

简短回答:"是"。

更长的答案:您的问题实际上是关于JavaScript语句而不是数组。您发布的代码([[p(1),p(2)],p(3),[p(4),[p(5)]],p(6)])不是数组,它是一个返回数组同时填充数组的语句。 JavaScript语句根据operator precedence的规则执行。

答案 2 :(得分:1)

您的问题不是很清楚,“处理”是什么意思?

var a = [];

这是一个数组文字,它将对空数组的引用赋给。

function p(x) { a.push(x); }

每次调用push()时,都会在索引a.length处添加一个新元素(即它总是在最高索引之后添加)。

[[p(1),p(2)],p(3),[p(4),[p(5)]],p(6)]

这是一个等价于:

的数组文字
a = [];
a[0] = [p(1),p(2)];
a[1] = p(3);
a[2] = [p(4),[p(5)]];
a[3] = p(6);

以下表达式:

a == [1,2,3,4,5,6]

始终为false,因为数组是对象,对象永远不会等于任何其他对象。你可以这样做:

var a = [0, 1];
var b = a;
a == b; // true since a and b reference the same array

但是

var a = [0, 1];
var b = [0, 1];
a == b; // false since a and b reference different arrays