读《像javascript一样思考》笔记

199 阅读1分钟
[[]][0]++; //没问题
[]++ //会报错

// 首先按照正常解题思路
var a = [];
var b = [a];
console.log(b); 
//打印出来是这个东西 二维数组 - [[]]
//[[]][0] 就等价于 b[0], b[0]也就是a,a就是个[], 
//所以 [[]][0]++被你解析出来 就是 []++, 但是正如第二行所示,会报错
//这是为什么呢?

成员表达式的求值结果并非结果本身([]),而是对该值的一个引用(Reference)——可以参考这里的第8步。因此实际上,诸如 [0] 的访问返回的是对外部数组的第 0 个位置的引用,而非位于该位置的值本身。