数组表示法操作顺序

时间:2014-11-18 17:31:19

标签: javascript arrays

我写了以下代码

o[s += "a"] = o[s += "b"] = o[s += "c"] = 0;

我很好奇为什么变量s最终存储“abc”而不是“cba”。似乎代码从右到左执行会更容易。

我好像执行者选择存储器索引然后决定存在什么,但这样做会让它听起来更慢,因为会有很多状态和内存被压入堆栈。有人可以解释为什么代码按顺序执行是有意义的吗?

我添加了一些小提琴,还有一些例子。 http://jsfiddle.net/eggrdtuk/3/

1 个答案:

答案 0 :(得分:4)

卢克的评论是正确的。我们可以查看MDN page运算符优先级。

计算成员访问优先级为1,赋值优先级为16.因此首先计算属性访问表达式,然后计算赋值操作。此外,Computed Member Access具有从左到右的关联性,而Assignment具有从右到左的关联性。

因此,我们可以想到从左到右解析属性访问表达式的第一步:

 o["a"] = o["ab"] = o["abc"] = 0

第二步是从右到左做分配:

 (o["a"] = (o["ab"] = (o["abc"] = 0)))
 (o["a"] = (o["ab"] = 0))
 (o["a"] = 0)

我不知道改变任何一个步骤的关联性会如何改变性能。但如果有原因,我很乐意学习:)