基本類型和引用類型的值
- 基本類型值指的是簡(jiǎn)單的數(shù)據(jù)段艘儒。
- 引用類型值指那些由多個(gè)值構(gòu)成的對(duì)象赞赖。
在將一個(gè)值賦給變量時(shí)甜害,解析器必須確定這個(gè)值是基本數(shù)據(jù)類型還是引用數(shù)據(jù)類型值。
- 5種基本數(shù)據(jù)類型:Undefined卑硫、Null徒恋、Boolean、Number和String欢伏。這五種數(shù)據(jù)類型是按值訪問(wèn)的入挣,因?yàn)榭梢圆僮鞅4嬖谧兞恐械膶?shí)際的值。
- 引用類型的值是保存在內(nèi)存中的對(duì)象硝拧。Javascript不允許訪問(wèn)內(nèi)存中年的位置径筏,也就是說(shuō)不能直接操作對(duì)象的內(nèi)存空間风皿。在操作對(duì)象時(shí)實(shí)際上是在操作對(duì)象的引用而不是實(shí)際的對(duì)象,為此匠璧,引用類型的值是按引用訪問(wèn)的。
引用類型動(dòng)態(tài)的屬性
定義基本類型值和引用類型值的方式是類似的:創(chuàng)建一個(gè)變量并為該變量賦值咸这。引用類型的值夷恍,我們可以為其添加屬性和方法,也可以改變和刪除其屬性和方法媳维。例如:
var student = new Object();
student.name = "tom";
alert("student.name"); //"tom"
但是酿雪,我們不能給基本類型的值添加屬性,盡管這樣做不會(huì)導(dǎo)致任何錯(cuò)誤侄刽。比如:
var student = "tom";
student.age = 27;
alert(student.age) //undefined
上面的例子說(shuō)明只能給引用值動(dòng)態(tài)地提添加屬性指黎,以便將來(lái)使用。
復(fù)制變量值
從一個(gè)變量向另一個(gè)變量復(fù)制類型值和引用值時(shí)州丹,存在不同醋安。如果從一個(gè)變量向另一個(gè)變量復(fù)制基本類型的值,會(huì)在變量對(duì)象上創(chuàng)建一個(gè)新值墓毒,然后把該值復(fù)制到為新變量分配的位置上吓揪。例如:
var num1 = 4;
var num2 = num1;
num1 中的4和num2 中的4是完全獨(dú)立的,給值只是num1 中4的一個(gè)副本所计。此后柠辞,這兩個(gè)變量可以參與任何操作而不會(huì)互相影響。
當(dāng)從一個(gè)變量向另一個(gè)變量復(fù)制引用類型的值時(shí)主胧,同樣也會(huì)將儲(chǔ)存在變量對(duì)象中的值復(fù)制一份放到為新變量分配的空間中叭首。不同的是,這個(gè)值的副本實(shí)際上是一個(gè)指針踪栋,而這個(gè)指針指向存儲(chǔ)在堆中的一個(gè)對(duì)象焙格。復(fù)制操作結(jié)束后,兩個(gè)變量實(shí)際上將引用同一個(gè)對(duì)象己英。因此间螟,改變其中一個(gè)變量,就會(huì)影響另一個(gè)變量损肛。例如:
var obj1 = new Object();
var obj2 = obj1;
obj1.name = "tom";
alert("obj2.name")