例如:
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]'定义的行为?它可以依赖吗?
答案 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