gpt4 book ai didi

javascript - 对使用 `map` 创建的数组上 `new` 的行为感到困惑

转载 作者:行者123 更新时间:2023-12-02 17:25:22 24 4
gpt4 key购买 nike

我对 map 的结果感到困惑ping 使用 new 创建的数组:

function returnsFourteen() {
return 14;
}

var a = new Array(4);
> [undefined x 4] in Chrome, [, , , ,] in Firefox
a.map(returnsFourteen);
> [undefined x 4] in Chrome, [, , , ,] in Firefox

var b = [undefined, undefined, undefined, undefined];
> [undefined, undefined, undefined, undefined]
b.map(returnsFourteen);
> [14, 14, 14, 14]

我预计a.map(returnsFourteen)返回[14, 14, 14, 14] (与 b.map(returnsFourteen) 相同,因为根据 MDN page on arrays :

If the only argument passed to the Array constructor is an integer between 0 and 2**32-1 (inclusive), a new JavaScript array is created with that number of elements.

我将其解释为 a应该有 4 个元素。

我在这里缺少什么?

最佳答案

当您像这样创建数组时:

var arr1 = new Array( 4 );

您得到一个长度为4的数组,但没有元素。这就是 map 不转换数组的原因 - 数组没有要转换的元素。

另一方面,如果你这样做:

var arr2 = [ undefined, undefined, undefined, undefined ];

您得到的数组的长度也为 4,但确实有 4 个元素。

请注意没有元素和具有值未定义的元素之间的区别。不幸的是,在这两种情况下,属性访问器表达式的计算结果都会为 undefined 值,因此:

arr1[0] // undefined
arr2[0] // undefined

但是,有一种方法可以区分这两个数组:

'0' in arr1 // false
'0' in arr2 // true

关于javascript - 对使用 `map` 创建的数组上 `new` 的行为感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20691347/

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