将基元类型与复合类型分配给变量

时间:2014-02-05 17:25:02

标签: javascript variables types composite primitive

当您将一个基本类型(如数字,字符串或布尔值)分配给JavaScript (或任何语言)中的变量时,它会在内存中打开一个插槽,将其放入,并在其上放置一个标签以便稍后引用,对吗?

var a = 1;
var b = 'foobar';
var c = false;
var d;

// What our memory would happen to look like:
var_a => 0x00 [1         ]
var_b => 0x01 ["foobar"  ]
var_c => 0x02 [false     ]
var_d => 0x03 [undefined ]

现在我的问题是,如何将数组,函数或对象等复合类型存储在内存中?我听说对象是在内存中创建的,变量只包含该对象的引用地址。怎么可能?从上面输入的内存表看起来,内存表只能包含一个值。

复合类型的内存中是否有特殊的插槽?数组和函数是否以与对象相同的方式存储(例如通过引用)

1 个答案:

答案 0 :(得分:1)

  

对象在内存中的某处创建,变量只包含该对象的引用地址。

  

怎么可能?从上面输入的内存表看起来,内存表只能包含一个值。

参考地址(称为“指针”) 是单个值。

  

内存中是否有类似复合类型的特殊插槽?

是。复合材料,也称为“struct”,可以包含多个值(但是它们是固定的),例如“描述字符串的字符串,对下一个属性的引用,以及对于单个链接的值的字段”一个对象作为链表。高级JavaScript对象存储为连接在一起的众多不同结构,以表示数据。

  

数组和函数的存储方式与对象相同(例如通过引用)吗?

是。但是,他们的数据结构不同,他们在不同的事情上进行了优化。