关于es6 copywidthin的问题

Elephant_H 2017-07-27 11:43:36
let a = {
3:1,
length:5
};
[].copyWithin.call(a,0,3);
console.log(a);
//Object {0: 1, 3: 1, length: 5}

let a = {
2:1,
length:5
};
[].copyWithin.call(a,0,2);
console.log(a);
//Object {0: 1, length: 5}

在上面两个例子中,call()的第二个参数控制从a的第几项开始替换数据,第三项控制从a的第几项开始读取数据,
那么在第二个例子为什么不是Object{0:1,2:1,length:5}
...全文
196 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Elephant_H 2017-07-27
  • 打赏
  • 举报
回复
引用 5 楼 xiaojunjor 的回复:
[quote=引用 4 楼 Elephant_H 的回复:] 那就是0 1 3 4的位置都是null 或者有没有什么比较正规的说法可以解释一下这个问题
说覆盖可能不准确,应该说当你把原本不存在的属性复制到原本存在的属性位置时,原来存在的属性会被删除掉(这好像不是很那理解吧) 正规的说法。。 我没看过ES6的文档,不是很清楚里面有没有对这个方法的具体规定[/quote] 谢谢了!
xiaojunjor 2017-07-27
  • 打赏
  • 举报
回复
引用 4 楼 Elephant_H 的回复:
那就是0 1 3 4的位置都是null 或者有没有什么比较正规的说法可以解释一下这个问题
说覆盖可能不准确,应该说当你把原本不存在的属性复制到原本存在的属性位置时,原来存在的属性会被删除掉(这好像不是很那理解吧) 正规的说法。。 我没看过ES6的文档,不是很清楚里面有没有对这个方法的具体规定
Elephant_H 2017-07-27
  • 打赏
  • 举报
回复
引用 3 楼 xiaojunjor 的回复:
[quote=引用 2 楼 Elephant_H 的回复:] 所以意思是实际上在a里面是{0:undefined,1:undefined,2:1,3:undefined,4:undefined} copywithin把2:1,3:undefined,4:undefined也复制过去把原先的2:1给覆盖了吗?
对啊,但是你这个地方有点歧义,0,1,3,4是压根没有,而不是值为undefined[/quote] 那就是0 1 3 4的位置都是null 或者有没有什么比较正规的说法可以解释一下这个问题
xiaojunjor 2017-07-27
  • 打赏
  • 举报
回复
引用 2 楼 Elephant_H 的回复:
所以意思是实际上在a里面是{0:undefined,1:undefined,2:1,3:undefined,4:undefined} copywithin把2:1,3:undefined,4:undefined也复制过去把原先的2:1给覆盖了吗?
对啊,但是你这个地方有点歧义,0,1,3,4是压根没有,而不是值为undefined
Elephant_H 2017-07-27
  • 打赏
  • 举报
回复
引用 1 楼 xiaojunjor 的回复:
从索引2开始复制,长度5,复制三个位置,undefined把属性2覆盖掉了啊
所以意思是实际上在a里面是{0:undefined,1:undefined,2:1,3:undefined,4:undefined} copywithin把2:1,3:undefined,4:undefined也复制过去把原先的2:1给覆盖了吗?
xiaojunjor 2017-07-27
  • 打赏
  • 举报
回复
从索引2开始复制,长度5,复制三个位置,undefined把属性2覆盖掉了啊

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧