Fork me on GitHub

JavaScript的变量

按照ECMA-262的定义,javaScript的变量与其他语言的变量有很大区别。JavaScript变量松散类型的本质(即弱值类型),决定了它只是在特定时间用于保存特定值的一个名字而已。 

取自JavaScript高级程序设计(第三版)

 

 

JavaScript主要分为基本类型和引用类型2种数值。

 

基本类型值:Undefined、Null、Boolean、number、String(注意:在其他语言中String一般作为引用类型保存,但是ECMAScript放弃这一传统) 

这些类型在内存中分别占有固定大小的空间,他们的值保存在空间,我们通过按值来访问的。

同时 我们不能给基本类型的值添加任何的属性。

 

引用类型:比较常见的有Array、Object、function、等等

由于这种值的大小不固定,因此不能把它们保存到栈内存中。但内存地址大小的固定的,因此可以将内存地址保存在栈内存中。这样,当查询引用类型的变量时,先从栈中读取内存地址,然后再通过地址找到堆中的值。对于这种,我们把它叫做按引用类型。

 

 

当然了这种类型我们可以更改其属性。

 相关衍生:

 深复制和浅复制 

首先我们来看一下数据机构中的4个术语:shallow copy(not shadow copy) 、deep copy、pass by value、pass by reference(or pass by address)。传值和传址我们可以根据上面讲的数据类型进行理解。

 

然后我们了解一下什么是深复制什么是浅复制呢?

 

字面上面的:

     浅复制(影子克隆):只复制对象的基本类型,对象类型,仍属于原来的引用.
     深复制(深度克隆):不紧复制对象的基本类,同时也复制原对象中的对象.就是说完全是新对象产生的.

 简单来说浅复制其实会相互影响,他们在内存中引用同一块地址。而深复制在内存中有2个地址存放相互之间不影响。

 

 

posted @ 2012-09-11 15:47  veSky  Views(239)  Comments(0Edit  收藏  举报