You need to enable JavaScript to run this app. MDN提供的基于Array.from实现的range函数运行原理是什么?
优惠活动
大模型
产品
解决方案
定价
更多

MDN提供的基于Array.from实现的range函数运行原理是什么?

Array.from range示例代码逻辑解答

问题1:{ length: (stop - start) / step + 1 }作为类数组对象的生效逻辑

类数组对象的核心判定规则非常简单:只要拥有非负整数类型的length属性即可,不需要实现数组的内置方法(比如push、slice等)。
Array.from处理第一个入参时,只会优先读取该参数的length属性值,以此确定最终生成的新数组长度,以及映射函数的执行次数。哪怕传入的对象没有对应索引的属性值,Array.from也会默认将对应位置的值设为undefined继续执行。此处传入的{ length: (stop - start) / step + 1 }完全满足类数组的最低要求,所以可以被Array.from正常识别。

问题2:映射函数参数(_, i)中下划线的作用

下划线在JavaScript语法中没有特殊含义,这是开发者之间的约定俗成写法:用来标识这个位置的参数不需要被使用,仅做占位。
根据Array.from的语法定义,映射函数的第一个参数是类数组对象当前遍历索引对应的值,第二个是当前遍历的索引值。这个示例里我们传入的类数组只有length属性,没有对应索引的自定义值,所以映射函数第一个参数拿到的永远是undefined,对range计算没有作用,因此用_占位,只取第二个索引参数i参与计算即可。

完整运行逻辑参考

以调用range(1, 5, 1)为例:

  1. 首先计算类数组的length值:(5-1)/1 +1 = 5,确定要生成长度为5的数组,映射函数执行5次
  2. 映射函数执行时i依次为0、1、2、3、4,计算结果分别为1+0*1=1、1+1*1=2、1+2*1=3、1+3*1=4、1+4*1=5
  3. 最终返回结果为[1,2,3,4,5]

内容的提问来源于stack exchange,提问作者user14696845

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 12:51:04