首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >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

复制
相关文章
Spring MVC 到底是如何工作的?
这篇文章将深入探讨Spring框架的一部分——Spring Web MVC的强大功能及其内部工作原理。
用户1257393
2018/09/30
1.4K0
Spring MVC 到底是如何工作的?
JavaScript 是如何工作的🔥 🤖 [视觉解释]
JavaScript 是世界上最受欢迎和最讨厌的语言之一。它被爱,因为它是有效的。您只需学习 JavaScript 即可制作全栈应用程序。它也被讨厌,因为它以出乎意料和令人不安的方式行事,如果您不投入理解该语言,可能会让您讨厌它💔。 这篇博客将解释 JavaScript 如何在浏览器中执行代码,我们将通过动画 gif 来学习它😆。看完这篇博文,你离成为Rockstar开发者又近了一步🎸😎 执行上下文 “ JavaScript 中的一切都发生在一个执行上下文中。” 我希望每个人都记住这句话,因为它是必不可
玖柒的小窝
2021/09/12
2.7K0
JavaScript 是如何工作的🔥 🤖 [视觉解释]
JavaScript是如何工作的?
当将 JavaScript 文件加载到浏览器中时,JavaScript Engine 会从上到下逐行执行该文件(异步代码将是一个例外,我们将在本系列后面的内容中看到异步代码)。
小丑同学
2020/10/30
2.9K0
JavaScript是如何工作的?
算力网络,到底是如何工作的?
前几期文章,我给大家详细介绍了一下算力和算力网络的本质。今天,是算力系列的最后一期,我们详细看看算力网络的组网架构和技术体系。
鲜枣课堂
2022/10/05
2.5K0
算力网络,到底是如何工作的?
Java 中的注解到底是如何工作的?
自Java5.0版本引入注解之后,它就成为了Java平台中非常重要的一部分。开发过程中,我们也时常在应用代码中会看到诸如@Override,@Deprecated这样的注解。
南风
2019/08/16
1.6K0
Java 中的注解到底是如何工作的?
Java中的注解到底是如何工作的?
自Java5.0版本引入注解之后,它就成为了Java平台中非常重要的一部分。开发过程中,我们也时常在应用代码中会看到诸如@Override,@Deprecated这样的注解。
Java技术栈
2019/06/19
2.1K0
Java中的注解到底是如何工作的?
JavaScript 究竟是如何工作的?
如果你是一个 JS 开发者或者是正在学习这门语言的学生,很大概率上你会遇到双字母词”V8”。在这篇文章中,我将会为你简述不同的 JS 引擎并深入探究 V8 引擎的工作机制。文章的第二部分涵盖了内存管理的概念,不久后将发布。
苏南
2020/12/16
4800
JavaScript 究竟是如何工作的?
如何去了解JavaScript引擎的工作原理
1. 什么是JavaScript解析引擎? 简单地说,JavaScript解析引擎就是能够“读懂”JavaScript代码,并准确地给出代码运行结果的一段程序。比方说,当你写了 var a = 1 + 1; 这样一段代码,JavaScript引擎做的事情就是看懂(解析)你这段代码,并且将a的值变为2。 学过编译原理的人都知道,对于静态语言来说(如Java、C++、C),处理上述这些事情的叫编译器(Compiler),相应地对于JavaScript这样的动态语言则叫解释器(Interpreter)。这两者的区
前朝楚水
2018/04/02
1.3K0
短信,到底是怎么工作的?
近日,工信部发布的《2018年上半年通信业经济运行情况》显示,上半年我国移动短信业务量同比增长8.8%;移动短信业务收入完成195亿元,同比增长5.7%。业内人士纷纷表示,短信业务焕发了“第二春”。
鲜枣课堂
2019/07/19
2.3K0
JavaScript 是如何工作的:JavaScript 的共享传递和按值传递
关于JavaScript如何将值传递给函数,在互联网上有很多误解和争论。大致认为,参数为原始数据类时使用按值传递,参数为数组、对象和函数等数据类型使用引用传递。
前端小智@大迁世界
2019/04/25
3.9K0
JavaScript 是如何工作的:JavaScript 的共享传递和按值传递
Java多线程探索(二):优秀的ThreadPoolExecutor到底是如何工作的?
  在上一篇Java多线程探索(一):为什么要使用ThreadPoolExecutor?中我们简单介绍了为什么推荐使用ThreadPoolExecutor的原因。今天我们就来具体分析一下ThreadPoolExecutor的工作原理。
闲宇非鱼
2022/02/08
4490
Java多线程探索(二):优秀的ThreadPoolExecutor到底是如何工作的?
JavaScript是如何工作的:存储引擎+如何选择合适的存储API
在设计 Web 应用程序时,为本地浏览器选择合适的存储机制至关重要, 一个好的存储引擎可以确保可靠地保存信息,减少带宽,提高响应能力。正确的存储缓存策略是实现离线移动 Web 体验的核心构建块,同时也大大的提高了用户体验。
前端小智@大迁世界
2019/01/29
1.7K0
JavaScript是如何工作的:存储引擎+如何选择合适的存储API
JavaScript中的闭包到底是什么?
即使是短暂接触JavaScript的初学者,想必也一定听说过“闭包”。本文将介绍有关闭包的全部内容,但文中并不会经常出现这个词。
人工智能小咖
2020/04/24
6250
JavaScript中的闭包到底是什么?
JavaScript 是如何工作的:WebRTC 和对等网络的机制!
WebRTC,名称源自网页即时通信(英语:Web Real-Time Communication)的缩写,是一个支持网页浏览器进行实时语音对话或视频对话的API。
前端小智@大迁世界
2019/03/15
2.4K0
JavaScript 是如何工作的:WebRTC 和对等网络的机制!
JavaScript 是如何工作: Shadow DOM 的内部结构+如何编写独立的组件!
Web Components 是一套不同的技术,允许你创建可重用的定制元素,它们的功能封装在你的代码之外,你可以在 Web 应用中使用它们。
前端小智@大迁世界
2019/01/29
1.8K0
JavaScript 是如何工作: Shadow DOM 的内部结构+如何编写独立的组件!
JavaScript如何工作:内存管理+如何处理4个常见的内存泄漏
本中,我们将讨论另一个重要主题——内存管理,这是由于日常使用的编程语言越来越成熟和复杂,开发人员容易忽视这一问题。我们还将提供一些有关如何处理JavaScript中的内存泄漏的技巧,在SessionStack中遵循这些技巧,既能确保SessionStack 不会导致内存泄漏,也不会增加我们集成的Web应用程序的内存消耗。
Javanx
2019/10/09
1.1K0
JavaScript如何工作:内存管理+如何处理4个常见的内存泄漏
《现代Javascript高级教程》JavaScript引擎的工作原理
JavaScript是一种脚本语言,常用于前端开发和后端服务器开发。在浏览器环境中,JavaScript的执行是由JavaScript引擎负责的。了解JavaScript引擎的工作原理,对于理解代码的执行过程、优化性能以及解决一些常见问题都非常有帮助。本文将深入探讨JavaScript引擎是如何解析和执行代码的,以及相关的优化技术和调试工具。
linwu
2023/07/27
2140
量子通信,到底是什么工作原理?
它涉及到量子论、信息论这样的烧脑理论,还关联了密码学、编码学等一堆看着都要绕着走的复杂学科。
IT阅读排行榜
2019/09/17
1.7K0
量子通信,到底是什么工作原理?
详解javascript中this的工作原理
在 JavaScript 中 this 常常指向方法调用的对象,但有些时候并不是这样的,本文将详细解读在不同的情况下 this 的指向。
用户6167509
2019/09/04
1.2K0
JavaScript如何工作:引擎,运行时和调用堆栈的概述
随着JavaScript越来越受欢迎,团队正在利用这个技术栈在多个层次- 前端,后端,混合应用程序,嵌入式设备等等提供支持。
frontoldman
2019/09/02
1.8K0
JavaScript如何工作:引擎,运行时和调用堆栈的概述

相似问题

Javascript -原语到底是如何工作的

10

setTimeout() JavaScript方法到底是如何工作的?

40

clearInterval()-Method in JavaScript -它到底是如何工作的?

12

node / javascript ()语法--它到底是如何工作的?

23

javascript数字属性名称到底是如何工作的?

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

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