问题描述
例如:
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]'定义的行为? 它可以依靠吗?
1楼
ChaosPandion
5
已采纳
2011-03-29 23:41:32
是否按定义的顺序处理Javascript数组的元素?
对,他们是。
是'a == [1,2,3,4,5,6]'定义的行为? 它可以依靠吗?
不,equals运算符在比较对象时执行引用相等。
2楼
gilly3
2
2011-03-29 23:49:33
简短回答:“是的”。
更长的答案:你的问题实际上是关于JavaScript语句而不是数组。
您发布的代码( [[p(1),p(2)],p(3),[p(4),[p(5)]],p(6)] )不是数组,它是一个语句,它返回一个Array,同时也填充一个Array。
JavaScript语句根据的规则执行。
3楼
RobG
1
2011-03-30 00:18:07
你的问题不是很清楚,“处理”是什么意思?
var a = [];
这是一个数组文字,它将对空数组的引用赋给a。
function p(x) { a.push(x); }
每次调用push()时,都会在a索引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]
总是假的,因为数组是对象,对象永远不会等于任何其他对象。 你可以做:
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