我可能会遗漏一些明显的东西,但有人可能会一步一步地分解为什么 Array.from({length: 5}, (v, k) => k)
会返回 [0, 1, 2, 3, 4]
?
https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/from
我不明白为什么这样做有效
我可能会遗漏一些明显的东西,但有人可能会一步一步地分解为什么 Array.from({length: 5}, (v, k) => k)
会返回 [0, 1, 2, 3, 4]
?
https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/from
我不明白为什么这样做有效
3 回答
在关于array.from的developer.mozilla.org页面上,没有人告诉我们“mapFn”可以带2个参数,例如v和k:v是当前元素的值,k是元素的索引 . 所以这是交易 .
{length:5}创建一个没有任何值的对象,但长度等于5;
(v,k)=> k是一个箭头函数,它将当前元素的索引号分配给该元素值 .
Javascript使用duck-typing . 这意味着当你从某个对象调用方法
foo
时,该对象应该是bar
类型,它不会检查这个对象是否真的是bar
但它会检查它是否有方法foo
.总结一下:
第一个是"fake" javascript数组(其属性为
length
) . 当Array.from
检查属性length
时,它返回5,因此它创建长度为5的实数 . 您可以调用fakeArray
object“arrayLike
” .第二部分就是lamba,它使用索引值(第二个参数)填充数组 .
这种技术对于模拟一些测试对象非常有用 . 例如: