数组元素的引用在Javascript中是如何工作的?
在C/C++等低级语言中,数组是“包含相同类型值的连续内存位置序列”,因为它们包含相同数据类型的值,所以可以使用索引(基址+索引*(数据类型大小))直接访问元素。但在JavaScript中,数组可以包含不同的数据类型值,因此不可能使用索引和基址计算地址。你能解释一下在JavaScript中访问数组元素的背景吗 与C/C++不同,JavaScript是一种解释语言。这意味着语言本身不会对所使用的记忆结构做出任何假设。理论上,如果你拿着一张纸和一支笔手工“执行”代码,你可以成为一名JavaScript解释器。因此,您的问题无法得到明确的回答:引擎可以以任何方式表示值,只要其行为符合规范 该规范仅说明: 1) Javascript中的值可以有各种类型,对象是特定的值类型 2) 对象是一组键值对,而键是字符串,值是任意值 3) 数组是非常特殊的对象,它也允许将数字作为键(并将它们转换为最接近的整数),并且具有一个特殊的数组元素的引用在Javascript中是如何工作的?,javascript,arrays,data-structures,Javascript,Arrays,Data Structures,在C/C++等低级语言中,数组是“包含相同类型值的连续内存位置序列”,因为它们包含相同数据类型的值,所以可以使用索引(基址+索引*(数据类型大小))直接访问元素。但在JavaScript中,数组可以包含不同的数据类型值,因此不可能使用索引和基址计算地址。你能解释一下在JavaScript中访问数组元素的背景吗 与C/C++不同,JavaScript是一种解释语言。这意味着语言本身不会对所使用的记忆结构做出任何假设。理论上,如果你拿着一张纸和一支笔手工“执行”代码,你可以成为一名JavaScrip
length
属性
现在,如果我要用C编写一个JS解释器,我首先会尝试以某种方式将“JavascriptValue”表示为某种联合类型:
union JavaScriptValue {
Number;
String;
Boolean;
Undefined;
Object;
}
现在一个对象可以表示为
unordered_map<JavaScriptValue, JavaScriptValue>
无序地图
JavaScript不在CPU上运行,没有内存。它定义了自己的内存模型,引擎必须对其进行仿真,如何实现这一点取决于引擎。它与C类似,只需使用索引在O(1)时间内随机访问数组。请记住,JavaScript规范所说的内容和JS引擎如何实现它是两件完全不同的事情。我可以很好地想象,现代JS引擎可以检测到数组只包含数字(例如),当JITed被视为非常类似于c/c++数组时。JavaScript数组和对象的行为实际上更像哈希映射,而不是c/c++数组。JavaScript不支持指针或任何类型的直接指针算法。当然,出于性能原因,引擎可以自由地以任何方式实现它。@KunalMukherjee,你能解释一下当数组允许不同的数据类型值时,基于索引的访问在内部是如何工作的吗。