Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JavaScript []到底是如何工作的?

JavaScript []到底是如何工作的?
EN

Stack Overflow用户
提问于 2013-04-11 19:22:19
回答 4查看 261关注 0票数 12

我正在为资源极其有限的嵌入式设备(http://www.espruino.com)编写一个JavaScript解释器,每次我认为我正确地实现了一些JavaScript时,我就意识到我错了。

我现在的问题是关于[]的。如何正确实现JavaScript的最基本部分之一?

我已经看过了JavaScript规范,也许我没有找到合适的部分,但我找不到有用的答案。

我之前假设你实际上有两个“映射”--一个用于整数,另一个用于字符串。数组长度是最高整数的值加1。然而,根据chrome上的jsconsole,这似乎是错误的:

代码语言:javascript
运行
AI代码解释
复制
var a = [];
a[5] = 42;
a["5"]; // 42
a.length; // 6

但也包括:

代码语言:javascript
运行
AI代码解释
复制
var a = [];
a["5"] = 42;
a[5]; // 42
a.length; // 6

所以..。太棒了-一切都被转换成字符串,并使用表示整数的最高值字符串(加1)来获得长度?不对。

代码语言:javascript
运行
AI代码解释
复制
var a = [];
a["05"] = 42;
a.length; // 0

"05"是一个有效的整数-即使是八进制。那么为什么它不会影响长度呢?

是否必须将字符串转换为整数,然后检查转换回字符串时是否匹配?

有没有人参考过用来存储和获取数组或对象中的项的确切算法?看起来应该很简单,但实际上并非如此!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-04-11 19:56:25

正如说明书所说,并被其他人注意到:

“当且仅当ToString( ToUint32(P) )等于P且ToUint32(P)不等于2^32-1时,属性名P(以字符串值的形式)是数组索引。”

这就解释了为什么在您场景中,"5"被认为是数组索引,而"05"不是:

代码语言:javascript
运行
AI代码解释
复制
console.log("5" === String("5" >>> 0));
// true, "5" is equal to "5", so it's an index

console.log("05" === String("05" >>> 0));
// false, "05" is not equal to "5", so it's not an index

注意:在JS中,Zero-fill right shift是替代ToUint32的最短方式,将一个数字移零。

票数 4
EN

Stack Overflow用户

发布于 2013-04-11 19:28:20

请参阅MDN

也可以引用JavaScript数组索引(例如,年份“2”而不是years2),尽管这不是必需的。无论如何,years2中的2最终都会被JavaScript引擎通过隐式toString转换强制转换为字符串。正是由于这个原因,"2“和"02”将引用years对象上的两个不同的槽,并且下面的示例记录为真:

代码语言:javascript
运行
AI代码解释
复制
console.log(years["2"] != years["02"]);

因此,使用a["5"]访问数组,而a["05"]在数组对象上设置一个属性。

票数 4
EN

Stack Overflow用户

发布于 2013-04-11 19:27:37

数组就是对象。这意味着它们可以具有不被视为数组元素的附加属性。

如果方括号参数是整数,它将使用该参数对数组执行赋值。否则,它将其视为字符串,并将其存储为数组对象上的属性。

DCoder基于delnan的注释和的注释,这是JavaScript确定它是否为数组的合适索引(而不仅仅是属性)的方式: http://www.ecma-international.org/ecma-262/5.1/#sec-15.4

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15957085

复制
相关文章
erp是什么意思,erp的用途是什么?有什么用途呢?
  一套好的ERP管理系统是协助企业做好内控与提高管理效率的关键,随着企业需求的不断增加,信息技术的发展,越来越多的企业开始使用ERP软件系统来辅助管理企业.那么究竟什么是ERP管理软件呢?它的用途是
明象ERP
2018/05/25
3K0
erp是什么意思,erp的用途是什么?有什么用途呢?
在Oracle中,LogMiner是什么?其有哪些用途?请简述LogMiner的使用过程。
在Oracle中,LogMiner是什么?其有哪些用途?请简述LogMiner的使用过程。
AiDBA宝典
2023/08/09
6690
在Oracle中,LogMiner是什么?其有哪些用途?请简述LogMiner的使用过程。
简析OpenTSDB的用途是什么
OpenTSDB 是一种基于 HBase 编写的分布式、可扩展的时间序列数据库。官方文档这样描述:OpenTSDB is a distributed, scalable Time Series Database (TSDB) written on top of HBase; 翻译过来就是,基于Hbase的分布式的,可伸缩的时间序列数据库,和上面的意思基本相同。 主要用途,就是做监控系统;譬如收集大规模集群(包括网络设备、操作系统、应用程序)的监控数据并进行存储,查询。 存储到OpenTSDB的数据,是以me
企鹅号小编
2018/02/08
2.8K0
简析OpenTSDB的用途是什么
在iis中如何设置站点的编码格式?
二、步骤        打开iis,选择一个站点,在右侧的asp.net区域里,找到‘.NET全球化’项。
习惯说一说
2019/08/08
7.4K0
在iis中如何设置站点的编码格式?
项目管理中wbs是什么_项目管理的wbs图的用途
Project Breakdown Structure,项目对象分解结构,以是项目交付结果本身为对象进行的层级结构分解。
全栈程序员站长
2022/09/27
1.2K0
IIS是什么?+ mpy实例
我今天收拾东西找到了几个IIS的传感器,看了下都是音频的器件。以前使用是ESP32 自带的IIS,因为时间的原因没有研究很多,这篇文章做下简单的总结。
云深无际
2022/04/15
1.1K0
IIS是什么?+ mpy实例
什么是Python,它的用途是什么?
正如你所听说的,python是最知名的编程语言之一。根据Stack Overflow去年进行的一项研究,现在使用该语言的开发人员中有三分之二喜欢它并打算继续使用它。不过,为什么它如此受欢迎?它有什么作用?
很酷的站长
2023/08/11
7720
什么是Python,它的用途是什么?
[1041]python中glob的用途
文章目录 简介 glob.glob glob.iglob 简介 glob是python自带的一个操作文件的相关模块,由于模块功能比较少,所以很容易掌握。用它可以查找符合特定规则的文件路径名。使用该
周小董
2021/08/18
3.7K0
bootstrap里的sr-only是什么属性?用途是什么?
全称是 screen reader only,意为:(仅供)屏幕阅读器,这个 class 主要用于增强 accessbility(可访问性)。
KEVINGUO_CN
2020/03/16
1.2K0
flash插件是什么 插件的定义和用途
对于大部分电脑使用者来说,flash插件都是一个并不陌生的词汇,相信很多人都曾经无数次在电脑冲浪过程中,看到插件版本更新的提醒。但是,并不是所有人都能正确理解这款插件的定义,以及如何正确使用这款插件。下面为大家带来这款插件的正确定义和具体用途,让使用者能更了解电脑里的插件。
用户8715145
2021/06/17
6.5K0
经典面试题-CORBA 是什么用途是什么
CORBA 标准是公共对象请求代理结构(Common Object Request BrokerArchitecture),由对象管理组织(Object Management Group,缩写为OMG)标准化。它的组成是接口定义语言(IDL), 语言绑定(binding:也译为联编)和允许应用程序间互操作的协议。其目的为:用不同的程序设计语言书写在不同的进程中运行,为不同的操作系统开发。
cwl_java
2019/11/29
7140
Shell脚本中的 /Dev/Null 用途
/dev/null 是一个特殊的设备文件,它丢弃一切写入其中的数据 可以将它 视为一个黑洞, 它等效于只写文件, 写入其中的所有内容都会消失, 尝试从中读取或输出不会有任何结果,同样,/dev/null 在命令行和脚本中都非常有用
用户4988085
2021/07/28
1.3K0
Xilinx FPGA中HP HR HD bank分别是什么用途
在开发FPGA绑定管脚时,经常会看到HP Bank、HR Bank和HD Bank,它们分别是什么意思?分别可以适用于哪些应用个?  
猫叔Rex
2022/03/30
2.6K0
Xilinx FPGA中HP HR HD bank分别是什么用途
什么是闭包?闭包的用途是什么?
所谓块级作用域就是指在循环中定义的变量,一旦循环结束,变量也随之销毁,它的作用范围只在这一小块。而在JavaScript中没有这样的块级作用域,由于JavaScript不会告诉你变量是否已经被声明,所以容易造成命名冲突,如果在全局环境定义的变量,就会污染全局环境,因此可以利用闭包的特性来模仿块级作用域。
青梅煮码
2023/01/16
1.9K0
时序数据库用途是什么?
在公有云的数据库产品清单里,近年出现了一个新的名词“时序数据库”。感觉数据库的产品已经不少了,时序数据库的用途是什么?为什么会诞生该产品?我们今天一起来看一下!
希望的田野
2019/09/24
3K0
时序数据库用途是什么?
在IIS中为SQL Server 2008配置报表服务
不知道是不是SQL Server 2008的Bug,我在安装了SQL2008后(选择了安装报表服务的),但是在IIS中根本没有报表服务的虚拟目录。只是这么一个问题,其他BI设计器、报表服务等都还算正常。
深蓝studyzy
2022/06/16
2.1K0
在IIS中为SQL Server 2008配置报表服务
UITableView在Flutter中是什么?
前面我们学习了文本、图片和按钮这些基本元素,这些基本元素需要进行排列组合,才能构成我们看到的UI视图。那么,当这些基本元素的排列布局超过屏幕显示尺寸(即超过一屏)时,我们就需要引入列表控件来展示视图的完整内容,并根据元素的多少进行自适应滚动展示。
拉维
2019/08/12
5.9K0
UITableView在Flutter中是什么?
DIV ID用途_纸的用途
<a href=”http://www.av286.com”>我是超级链接</a>
全栈程序员站长
2022/09/16
2.1K0
点击加载更多

相似问题

这些IIS绑定是什么?它们的用途是什么?

10

密钥在kubernetes中的用途是什么?它的用途是什么?

120

.*在中的用途是什么?

13

在XPath 3.1中地图的用途/用途是什么?

21

~~在javascript中的用途是什么?

34
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档