在C / C ++等低级语言中,数组是“包含相同类型值的内存位置的连续序列”,因为它们包含相同数据类型的值,所以可以使用索引(基地址+索引*)直接访问元素(数据类型的大小)。但是在JavaScript中,数组可以包含不同的数据类型值,因此无法使用索引和基地址进行地址计算。您能否解释一下在JavaScript中访问数组元素的背景。
答案 0 :(得分:0)
与C / C ++不同,JavaScript是一种解释型语言。这意味着语言本身不对使用的内存结构做任何假设。从理论上讲,如果您需要一支纸和一支笔并用手“执行”代码,那么您可以成为JavaScript解释器。因此,您的问题无法得到明确的回答:引擎可以按照任何方式表示值,只要该值按照规范运行即可。
规范仅说明:
1)Javascript中的值可以有多种类型,对象是某种值类型。
2)对象是一组键值对,而键是字符串,值是任何值
3)数组是非常特殊的对象,它们也允许数字作为键(并将其底限为最接近的整数),并具有特殊的length
属性。
现在,如果我要用C语言编写一个JS解释器,我首先将尝试以某种方式将“ JavascriptValue”表示为某种联合类型:
union JavaScriptValue {
Number;
String;
Boolean;
Undefined;
Object;
}
现在一个对象可以表示为
unordered_map<JavaScriptValue, JavaScriptValue>