gpt4 book ai didi

javascript - Array(n) 和 Array(n).fill 之间的区别?

转载 作者:可可西里 更新时间:2023-11-01 01:22:49 29 4
gpt4 key购买 nike

我注意到如果我这样做:

Array(n).map(() => console.log('test'))

我没有打印任何东西。

但是如果我这样做:

Array(n).fill().map(() => console.log('test'))

test 打印了 n 次。

为什么会这样?如果我执行 Array(n).length 我会返回 n

我在 REPL 中注意到 Array(5) 返回:

[ , , , , ]

Array(5).fill() 返回:

[未定义,未定义,未定义,未定义,未定义]

在这两种情况下,typeof 数组中的任何元素 === undefined

那么,这是怎么回事?

最佳答案

map 仅对数组的已定义整数属性进行操作。 Array(n) 不设置整数属性,而 Array(n).fill() 设置。 不存在的属性值为未定义的现存属性之间存在差异。

Array(n) 设置数组的 length 属性,但不设置任何属性。数组对象没有任何整数属性。

.fill 将数组的所有整数属性设置为从零到小于 length 的一。当您执行 Array(n) 时,您设置新数组的 length 属性,然后 .fill() 定义并设置每个整数属性最多 n-1Array(n).fill() 创建的数组确实 具有定义到length - 1 的属性。 (属性恰好设置为 undefined,因为您没有将参数传递给 fill,但它们确实存在。)

在实践中,如果您执行 Object.keys(Array(4))(空数组)与 Object.keys(Array(4).fill( ))(字符串列表 “0”“3”)。在第一种情况下,属性不存在;在第二种情况下,他们这样做了。

关于javascript - Array(n) 和 Array(n).fill 之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35013777/

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