当我运行以上代码后,为什么输出结果是{0:"a",1:"b",2:"c"}
而不是{"a","b","c"}
呢?
按道理,数组的扩展运算符不是把数组扩展成一系列以逗号分隔的元素吗?那为什么在o
对象里扩展arr
数组没有把arr
扩展成以逗号分割的"a","b",c
而是扩展成了{0:"a",1:"b",2:"c"}
呢?
查了半天文档没找到答案,求大佬解答
下面有人回答说{"a","b","c"}什么格式都不是,然后我就改了下,下面修改后的贴图:
按道理,扩展后的结果不应该是{a,b,c}
进而转化成{a:"zhangsan",b:"lisi",c:"wangwu"}
吗?
为什么结果还是类数组对象{0: "zhangsan", 1: "lisi", 2: "wangwu"}
?
很困惑啊~~
看过问题和其他人的答案后...其实你问题本身就是有问题的,所以一开始就从一个偏离的方向挖掘答案,自然无论怎样都无法自圆其说,给你自己一个令人信服的答案。
这里的
...
并不是数组扩展运算符,而是ES6的提案、ES7标准中的对象扩展运算符(spread)。js解释器从左至右解析,当看到{
后边跟的是...
时,它会把这个...
解释为spread中的对象扩展运算符([
后边跟的...
才是数组扩展运算符),那么此时将arr
当做一个标准对象(类数组对象)来遍历展开,这样才出现了你看到的结果{a:"zhangsan",b:"lisi",c:"wangwu"}
。为了你能够更好的理解我所说的答案,送你一段我整理过的关于rest与spread运算符的比较笔记:
spread与rest运算符:
经验:
ES7中对象的spread与rest