Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/452.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
数组元素的引用在Javascript中是如何工作的?_Javascript_Arrays_Data Structures - Fatal编程技术网

数组元素的引用在Javascript中是如何工作的?

数组元素的引用在Javascript中是如何工作的?,javascript,arrays,data-structures,Javascript,Arrays,Data Structures,在C/C++等低级语言中,数组是“包含相同类型值的连续内存位置序列”,因为它们包含相同数据类型的值,所以可以使用索引(基址+索引*(数据类型大小))直接访问元素。但在JavaScript中,数组可以包含不同的数据类型值,因此不可能使用索引和基址计算地址。你能解释一下在JavaScript中访问数组元素的背景吗 与C/C++不同,JavaScript是一种解释语言。这意味着语言本身不会对所使用的记忆结构做出任何假设。理论上,如果你拿着一张纸和一支笔手工“执行”代码,你可以成为一名JavaScrip

在C/C++等低级语言中,数组是“包含相同类型值的连续内存位置序列”,因为它们包含相同数据类型的值,所以可以使用索引(基址+索引*(数据类型大小))直接访问元素。但在JavaScript中,数组可以包含不同的数据类型值,因此不可能使用索引和基址计算地址。你能解释一下在JavaScript中访问数组元素的背景吗

与C/C++不同,JavaScript是一种解释语言。这意味着语言本身不会对所使用的记忆结构做出任何假设。理论上,如果你拿着一张纸和一支笔手工“执行”代码,你可以成为一名JavaScript解释器。因此,您的问题无法得到明确的回答:引擎可以以任何方式表示值,只要其行为符合规范

该规范仅说明:

1) Javascript中的值可以有各种类型,对象是特定的值类型

2) 对象是一组键值对,而键是字符串,值是任意值

3) 数组是非常特殊的对象,它也允许将数字作为键(并将它们转换为最接近的整数),并且具有一个特殊的
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,你能解释一下当数组允许不同的数据类型值时,基于索引的访问在内部是如何工作的吗。