JavaScript new Array(n) 声明的使用

2023-12-27

基本的 JavaScript 问题:因为数组没有像 Java 那样的硬性限制(即索引越界异常 https://docs.oracle.com/javase/8/docs/api/java/lang/IndexOutOfBoundsException.html),我们指定 length 属性的声明有什么用?

var a = new Array(10);

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


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

性能更好!/速度更快!

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

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

来自第 15.4.2.2 节ECMA-262 http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf:

如果论证len是一个数字并且 ToUint32(len) 等于len,那么length新构造的对象的属性设置为 ToUint32(len)。如果论证len是一个数字并且 ToUint32(len) 不等于len, a 范围误差抛出异常。

一个不科学的娱乐测试用例如下:http://jsbin.com/izini http://jsbin.com/izini

它使代码更容易理解!

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

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

Pros:

  1. 他们会更容易理解您想要代码做什么。
  2. 他们稍后将能够找到由你的假设引起的错误(开玩笑)

Cons:

  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 的实现可能会使用它来提高性能。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JavaScript new Array(n) 声明的使用 的相关文章

随机推荐

  • 使用字母数字子集生成 1M 个唯一随机密钥

    我想生成 1M 个随机 出现的 唯一字母数字密钥并将它们存储在数据库中 每个密钥的长度为 8 个字符 并且仅使用子集 abcdefghijk n pqrstuvxyz 和 0 9 字母 l m o 和 w 被丢弃 由于印刷空间有限 m 和
  • javascript/jquery 中是否有等效的 PHP date() ? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在尝试计算一年中的某一天 无论是今天还是其他日期 在 PHP 中 我可以使用 date 函数并做任
  • 编写库(而不是应用程序)时如何处理异常 - Java

    我目前正在为 RESTful Web 服务 API 编写 Java 包装器 我现在正在尝试清理一些异常处理 但不确定采取什么方法 这是一个供 Java 程序员使用的工具 因此我无法像处理最终用户应用程序那样真正处理它 如果我有一个方法 连接
  • 如何替换元胞数组中的元素?

    我有一个元胞数组 A NaN k m n 我想用 NaN 替换除 A 的第三个元素之外的所有元素以获得 B NaN NaN m NaN 请对我如何解决这个问题有任何帮助 建议吗 另外 是否可以通过一行代码来完成此操作 您可以创建一个所有 N
  • 使用Random.range生成级别no而不重复

    我尝试使用递归来解决手头的问题 如下所示 int newlevelgen int exampleno Random Range 1 4 if exampleno lastlevelno lastlevelno exampleno retur
  • Sling 重写器的工作原理说明

    我想了解 sling url 重写是如何工作的 我正在关注这个网址 http www cognifide com blogs cq multidomain cq mappings and apache configuration http
  • 自托管 WCF 服务无法通过 WCFTestClient 进行测试

    我正在尝试使用 WCFTestClient 测试我的自托管 wcf 服务 我收到这样的错误 错误 无法从中获取元数据http localhost 2303 MyService http localhost 2303 MyService如果这
  • Django 模型字段。自定义字段值设置器

    有没有办法在 django 自定义属性设置器中执行这样的操作 class MyModel models Model myfield models CharField length 250 myfield setter def set pas
  • 读取 COBOL 中的 STDIN (SYSIN)

    我想从 COBOL 中的 STDIN 又名 SYSIN 中读取行 现在我只想把它们打印出来 这样我就知道我已经拿到了它们 从我读到的所有内容看来 这应该有效 IDENTIFICATION DIVISION PROGRAM ID APP EN
  • 无法解析 ApplicationModule 的参数:(?)

    对 Angular 来说还很陌生 我的应用程序包含 1 个服务和 3 个组件 编译成功 我收到此错误 但不知道出了什么问题 未捕获的错误 无法解析 ApplicationModule 的所有参数 Debugging gave me very
  • 使用 oembed 端点获取 Instagram 的视频媒体源

    上下文 我有一段 jQuery ajax 代码 直到最近几周左右 它已经愉快地工作了大约 9 个月 此代码使用 Instagram 的嵌入端点 http instagram com developer embedding 这使我能够从正常的
  • 在python中生成IMEI

    你好 我正在尝试在 python 中创建一个函数来生成有效的 IMEI 号码 所以这是我的函数 IMEI 验证使用 Luhn 算法 所以我尝试在我的脚本中实现它 def getImei num suma 0 for i in range 0
  • 关于C++ 11中头的几个问题

    我有几个关于新的问题
  • 引擎“节点”与该模块不兼容

    部署到 AWS 时出现以下纱线错误 error email protected cdn cgi l email protection The engine node is incompatible with this module Expe
  • 使用 class.isEnum() 还是 instanceof Enum 更好?

    我有一个对象 我想检查它是否是枚举类型 有两种方法可以做到这一点 object getClass isEnum or object instanceof Enum 有一个更好吗 在我看来object instanceof Enum更好有几个
  • Centos7 docker-py 好像没有安装

    我安装了 Centos7 最小版本 然后 ansible docker pip 并使用 pip 安装了 docker py 版本 Docker 版本 1 6 0 内部版本 8aae715 1 6 0 安塞波1 9 1 docker py 1
  • Play 框架依赖注入

    我一直在 Google 上寻找一些关于如何在 Play Framework 2 1 中使用 Guice Spring DI 的有用信息 我想要做的是在一些 DAO 中注入多个服务 反之亦然 只需要对此进行一些澄清 在 play 2 1 中
  • 如何创建指定的typescript RN版本?

    我输入命令以使用 typescript 创建 React Native 项目 npx react native init MyApp template react native template typescript 包 json reac
  • 指向不同返回类型和签名的函数的指针映射

    我正在寻找一种通过字符串输入调用不同函数的方法 我有一个映射 它将每个唯一的字符串与一个函数指针联系起来 还有一个查找函数来搜索映射并在找到时返回一个指针 现在的技巧是 我需要一种方法来存储和返回指向至少具有不同返回类型的函数的指针 如果可
  • JavaScript new Array(n) 声明的使用

    基本的 JavaScript 问题 因为数组没有像 Java 那样的硬性限制 即索引越界异常 https docs oracle com javase 8 docs api java lang IndexOutOfBoundsExcepti