JavaScript的类型化数组是否初始化为0?

7

我需要一个类型化数组,具体是Float32Array,所有元素都是零。我曾考虑手动清除它,但我注意到当我声明它时,它已经被归零了。这是规范中指定的行为吗?我能依靠这种行为吗?


“Zeroed out” 是什么意思? - KooiInc
你能展示一下你的代码吗?JavaScript 没有类型化数组。一个数组可以包含任何你想放进去的东西;例如 [1,"hello",{a:3}] 是 JavaScript 中一个有效的数组。 - jackwanders
这是我在Google Chrome控制台中得到的结果。a = new Float32Array(10)返回[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]。 我正在使用类型化数组,因为我正在使用WebGL。它们与标准数组不同,并且由于主要用于WebGL,因此有点深奥。我应该指明这一点。 - SharkCop
2个回答

6
根据JavaScript的类型化数组规范,内容被初始化为0。因此,您应该能够依赖这种行为。
请注意,类型化数组尚不具有非常好的跨浏览器支持。Chrome、Safari、Firefox和Opera支持它,但Internet Explorer在IE10中才引入了支持。
我还应该提到,与普通数组相比,类型化数组目前在Safari中非常慢。因此,除非您不针对Safari,否则最好避免使用类型化数组。使用普通数组,所有数组值都将初始化为undefined

-5

默认情况下,如果您使用大小构造数组,则包含null。 由于 null == 0 ,因此您可能会考虑它填充了0或任何其他虚假值。但是,如果您尝试调用数字的方法(例如.toString),则会遇到问题。或者如果您通过期望数字形式的函数运行它,比如parseInt,也会遇到问题。

理想情况下,您应该始终初始化数组,以便确切地知道它包含什么内容,尽管个人认为在JS中从未听说过类型化数组...


默认情况下,如果你使用指定大小的方式构造数组,那么它们将包含 null。但事实并非如此。请在控制台中尝试以下代码:var a = []; a.length = 5; console.log(a[3])var a = new Array(5); console.log(a[3]) - KooiInc
这两个都会给我一个充满null的数组,除非我误解了? - Niet the Dark Absol
可能是浏览器的差异吗?在Chrome控制台中,console.log(a)显示为[undefined × 5] - KooiInc
啊,你说得对。我之前使用 JSON.stringify 来尝试找出这些“nothings”是什么,但是 typeof 显示它们是“undefined”。不管怎样,它们仍然是假值,所以我的回答仍然成立。 - Niet the Dark Absol
3
如果你从未听说过类型化数组,那么为什么要回答这个问题呢? - JLRishe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接