【发布时间】:2019-12-12 11:26:08
【问题描述】:
对不起,这里的标题误导了,我无法框出任何合适的标题。
当数组中没有任何东西时,我对数组感到困惑(empty X n 打印)但它们有长度。
例如我通过const a = [,,,] 创建数组。这将创建一个长度为 3 但其中没有任何内容的数组。如果我在浏览器控制台中打印它,它会打印以下内容:
What does empty mean here? 如果我运行 map 或 forEach 函数并尝试控制台某些东西,我什么也得不到。
添加了一些代码。
const a = [,,,]
console.log("print a: ",a)
console.log("print a.length: ",a.length)
console.log("print typeof a[0]: ", typeof a[0])
console.log("a.forEach((data, index) => { console.log(data, index) }): ", a.forEach((data, index) => { console.log(data, index) }))
console.log("")
const b = [undefined, undefined, undefined]
console.log("print b: ", b)
console.log("print b.length: ", b.length)
console.log("print typeof b[0]: ", typeof b[0])
console.log("b.forEach((data, index) => { console.log(data, index) }): ", b.forEach((data, index) => { console.log(data, index) }))
console.log("")
console.log("compare a[0] and b[0]: ", a[0] === b[0])
唯一不同的是当我打印 a 和 b 时(尽管 stackoverflow 控制台打印它们相同,但浏览器控制台打印不同)以及当我尝试循环遍历数组时。还有 momentjs isEqual 给他们相等 (jsfiddle here)
我的主要疑问是:
- 它是什么类型的数组?
- 这里的空是什么意思?
- 它与包含所有未定义值或空数组的数组有何不同?不是吗?
- 我们是使用它还是使用它的任何示例用例
我已经阅读了关于 null 和 undefined 数组值的内容并理解了它。但是对于这个,我没有找到任何合适的东西。我发现的大部分搜索都与 const a = [] 是空数组或如何检查数组是否为空等有关。
因此,如果有人可以解释或提供任何适当的链接以供阅读,那将非常有帮助。
如果我应该添加其他内容,请告诉我。
【问题讨论】:
-
Empty 就是字面上的意思 - 该插槽中没有数据。不是
undefined,也不是null- 数组是稀疏的。 -
@VLAZ,如果我错了,请纠正我。类似于:null 表示内存分配了 null 值(或引用指向 null),undefined 表示分配了内存位置但不存在值(或引用存在但不指向任何地方)但
empty means that memory is not even allotted (or reference doesn't exists at all)? -
@Sunil 有点像。 在数组中是否分配内存是一个实现细节。 JS 中的数组不一定像其他语言那样被赋予连续的内存,因此稀疏数组肯定可以有空槽甚至不占用空间。
null和undefined都是值,所以它们是存在的。但是,可能所有设置为null的绑定实际上都指向一个值,因此您不会得到null的多个“副本”。不确定是否已经完成。undefined可能是一个实际值或一个缺少值 - 例如a = {}; a.foo.
标签: javascript arrays