gpt4 book ai didi

javascript - Array.prototype.slice.call() 的内部工作

转载 作者:行者123 更新时间:2023-11-30 12:00:45 25 4
gpt4 key购买 nike

众所周知,我们在将函数参数转换为数组等场景中使用 Array.prototype.slice.call()。

现在,如果我尝试对其他对象执行相同操作,该对象具有以数字方式迭代的键值以及非数字键值,则将其省略。(非数字)。下面是代码。

var myobject ={ // array-like collection
length: 4,
'0': 'zero',
'1': 'one',
'2': 'two',
'3': 'three'
}

var myarray = Array.prototype.slice.call(myobject) // returns myobject as a true array: ["zero", "one", "two", "three"]

同样的流程,如果我使用的对象仅具有键值,如 0,1,2,3... 返回空数组。下面是代码。

var myobject2 ={ // array-like collection

'1': 'one',
'2': 'two',
'3': 'three'
}

var myarray2 = Array.prototype.slice.call(myobject2) //returns empty array

谁能解释一下为什么会这样????它只看数字键,创建空数组并将其转换为数字索引吗?????

最佳答案

Array.prototype.slice.call() 需要一个 .length 属性,然后是相应的从零开始的数字属性(尽管所有属性名称实际上都是字符串所以它是数字的字符串)。如果它没有找到那些存在的,它就不会正确地执行 .slice()

如果源不是一个实际的数组,那么它基本上只是进入一个从 0.length - 1 的循环,寻找对象上匹配的属性名称并使用该属性名称复制它找到的任何值。属性名称必须与数字的字符串等价物完全匹配。

任何缺失的数字属性都被简单地复制为 undefined,因为这就是它们的值。

关于javascript - Array.prototype.slice.call() 的内部工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36687773/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com