在对象常量上调用js Array.prototype.copyWithin(target,start,end)会做什么?

user5389726598465

这来自MDN文档

[].copyWithin.call({length: 5, 3: 1}, 0, 3);
// {0: 1, 3: 1, length: 5}

我困惑的误解:财产0:1来自何处?具有2个属性的非数组对象的值将从第4位复制到第0位,因此没有操作。输出是冲销和新属性{0:1}

TJ人群

首先,请记住,标准数组只是具有特殊处理属性的对象,其名称为数组索引*,特殊length属性,并Array.prototype作为其原型。数组索引是属性名称(我们将它们写为数字,但从技术上讲,在规范级别上,它们是字符串 -尽管实现自然地对其进行了优化)。

我们可以copyWithin在非数组对象上使用它,因为它是“有意的泛型”的-只要被调用的对象具有length属性,它就不会检查它是否在数组上被调用

原始对象,{length: 5, 3: 1}具有两个属性:("length"值5)和"3"(值1)。然后进行copyWithin(obj, 0, 3)调用,显示为“将索引3到'数组'的末尾复制到索引0。” 因此非常粗略:

var target = 0;
var source = 3;
while (source < obj.length) {
    if (source in obj) {           // If the object has this property...
        obj[target] = obj[source]; // ...copy it
    }
    ++target;
    ++source;
}

因此,它结束了复制属性"3"(值1)财产"0",然后移动到财产"4",它不存在,因此被跳过,然后停止,因为source没有< obj.length了。

你可能会发现,通过阅读MDN的填充工具用于copyWithin规范,以获得一个好主意,它做什么。


*从该链接:

一个整数指数是一个字符串值属性密钥是一个规范的数字串(见7.1.16),并且其数字值是0或正整数2≤ 53 -1。一个数组索引是一个整数指数,其数值的范围是从0≤我<2 32 -1。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Array.prototype.sort() 对象对

JS:导出Array.prototype

在Array.prototype中获取调用方

哪些用例存在Array.prototype.copyWithin()?

带有两个输入的箭头函数的 Array.prototype.map() 调用的目的是什么?

JavaScript中对象的Array.prototype.map()等效项是什么

Array.prototype.forEach.call与Array.prototype.forEach有什么区别

Array.prototype.filter()在对象数组上不起作用,因为引号不同

在es6地图上调用ʻArray.prototype.some()`的更好方法

JavaScript Array.prototype.sort()不能在DOM.HTMLLIElements上调用

为什么length是`Array`的属性而不是`Array.prototype`链

Array.prototype.join.call在后台为字符串做什么?

调用Array.prototype.slice.apply(arguments)时结果不同

Array.prototype对象的length属性-ES 5

Array.prototype.includes函数如何比较对象

Javascript Array.prototype.reduce()减少signe nubmer而不是对象

使用Array.prototype.includes定位对象数组中的属性

[] .__ proto__ === Array.prototype // === [Symbol(Symbol.unscopables):对象]?

Array.prototype.find搜索数组中的对象

如何使用Array.prototype.includes()查找对象?

使用Array.prototype.findIndex()查找对象

在Array.prototype.map()内部分解对象属性

什么是Array.prototype.sort()时间复杂度?

为什么在javascript中没有Array.prototype.flatMap?

什么是Array.prototype.filter()的就地替代品

为什么Array.prototype.forEach无法链接?

为什么 Array.prototype.some() 不为空集返回 true?

JavaScript:扩展Array.prototype有什么危险?

Array.prototype.find,它的规格是什么?