gpt4 book ai didi

javascript - 使用 JavaScript new Array(n) 声明

转载 作者:IT王子 更新时间:2023-10-29 03:01:49 25 4
gpt4 key购买 nike

基本 JavaScript 问题:由于没有像 Java 那样的数组硬性限制(即 IndexOutOfBoundsException ),我们指定长度属性的声明有什么用?

var a = new Array(10);

我知道它预定义了长度并将“未定义”放入那些空白处。拥有它的理由是否足够?

最佳答案

声明数组大小有很多可感知的好处,但我认为大多数可感知的好处只是被传递的 FUD。

更好的性能!/更快!

据我所知,预分配和动态分配之间的区别可以忽略不计。

更有趣的是,规范没有声明数组应该设置为预先分配的长度!

来自第 15.4.2.2 节 ECMA-262 :

If the argument len is a Number and ToUint32(len) is equal to len, then the length property of the newly constructed object is set to ToUint32(len). If the argument len is a Number and ToUint32(len) is not equal to len, a RangeError exception is thrown.

一个不科学的娱乐测试用例在这里:http://jsbin.com/izini

它使代码更易于理解!

就我个人而言,我不同意。

想想你过去写过的javascript,想想你以后可能要写的代码。我想不出有哪一次我需要在我的一个数组上指定静态限制。我还认为,在 javascript 中限制数组的潜在问题大大超过了让人们知道你在想什么而不进行实际检查所带来的好处。让我们权衡利弊...

优点:

  1. 他们会更容易理解您打算用代码做什么。
  2. 他们稍后将能够找到由您的假设引起的错误(舌头坚定地在脸颊上)

缺点:

  1. 快速浏览很容易混淆“new Array(10)”和“new Array('10')”,它们做的事情完全不同!
  2. 您在没有正常长度限制的情况下对代码施加任意限制,导致您编写大量样板代码来检查和维护限制。
  3. 您对代码强加了任意限制,这些代码可能已经被泛化以处理任何长度的值。
  4. 您假设人们将如何阅读您的代码,同时假设替代方案不会造成混淆。

你还不如写:

//I assume this array will always be length 10
var arr = new Array();

在上述情况下,注释甚至可能更可取。明确的意图声明可以避免不习惯使用构造函数作为意图声明的任何混淆。

好吧..那你为什么认为它在那里呢?

方便。当他们编写规范时,我认为他们意识到了两件事。

  1. 来自类似语言的开发人员会习惯这种分配。
  2. ECMAScript 的实现可能会使用它来提高性能。

所以他们把它放在那里。规范只定义了参数的使用,而不是它应该如何实现。

关于javascript - 使用 JavaScript new Array(n) 声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1246408/

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