gpt4 book ai didi

javascript - new Array() 创建的 元素有什么值?

转载 作者:行者123 更新时间:2023-12-01 02:55:58 24 4
gpt4 key购买 nike

我对这些小家伙很困惑。在我遇到它们和 Array.prototype.filter 之间的一些有趣行为之后,我在 re.pl 中闲逛,试图理解它们的真正值(value)。但似乎他们从 <empty> 切换过来至undefined取决于谁在看(至少在 re.pl 和 Node 中,在此环境中它们被记录为 undefined)。

 
let emptyArr = new Array(5);
//set up two control elements
emptyArr[0] = 0;
emptyArr[4] = undefined;


console.log('\nemptyArr:', emptyArr)
console.log('\npeeking at an empty element:', emptyArr[1])
console.log('\nfilter for undefined elements:', emptyArr.filter(e => e === undefined))
console.log('\nfilter for any element:',
emptyArr.filter(e => {
console.log("ele:", e)
return true
})
) // only two elements are registered here

console.log('\nmappedEmpty:', emptyArr.map(e => e)) //everything is preserved

console.log('\ngenerated array', Array.from(emptyArr))
console.log('\nalways true filter on generated array:', Array.from(emptyArr).filter(e => true)) // empties are now 'true' undefined

这里有什么故事吗?古怪的数组原型(prototype)方法还是 secret 的超假 y 值?

最佳答案

What's the story here? Quirky array prototype methods or a secret ultra-false-y value?

数组是对象。数组的元素只是底层对象的属性。访问不存在的属性将返回undefined。因此,当您访问 emptyArr[1] 时,您会得到 undefined。查看 Chrome 的控制台可能会有所帮助:

enter image description here

如您所见,04 之所以存在,是因为您通过分配这些条目来创建这些条目。 123 不存在。

这些没有值(value)的位置通常被称为“空洞”。您的阵列在位置 123 处有孔。有洞的数组也称为“稀疏数组”。

大多数数组方法(.filter.map 等)都会跳过漏洞。我们可以通过一些方法轻松证明这一点:

// Array#map
console.log([,,,42].map(() => 21)); // [,,,21], not [21,21,21,21]
// Array#every
console.log([,,,42].every(x => x === 42)); // true, not false

当然我们也可以只看language specification ,其中显示 Array#every例如:

callbackfn is called only for elements of the array which actually exist; it is not called for missing elements of the array.

另一方面,

Array.from 显式查看传递给它的值的 .length 属性,它将复制 0 之间的任何属性/元素.length。换句话说,它不会跳过漏洞。

在 Chrome 控制台中查看数组之间的差异:

enter image description here

值得注意的是,也许arr.length并不关心漏洞。它始终是数组中最高的集合索引 + 1。

关于javascript - new Array() 创建的 <empty> 元素有什么值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46716869/

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