javascript引用類型和值類型

/*
ECMAScript變量可能包含兩種不同數據類型的值:基本類型值和引用類型值。
基本類型值指的是那些保存在棧內存中的簡單數據段,即這種值完全保存在內存中的一個位置。
而引用類型值則是指那些保存在堆內存中的對象,意思是變量中保存的實際上是一個指針,這個指針指向內存中的另一個位置,該位置保存對象。
5中基本數據類型:Undefined、Null、Boolean、Number和String.
這5種基本數據類型的值在內存中佔有固定大小的空間,因此可以把它們的值保存在棧內存中。
這樣可以提高查詢的速度。對於保存基本類型值的變量,我們說它們是按值訪問的,因爲我們操作的是它們實際保存的值。
如果賦給變量的是一個引用類型的值,則必須在堆內存中爲這個值分配空間。由於這種值得大小不固定,因此不能把它們保存到佔內存中。
但內存地址的大小是固定的,因此可以將內存地址保存在棧內存中。這樣,當查詢引用類型的變量時,就可以首先從棧中讀取內存地址,然後再
“順藤摸瓜”地找到保存在堆中的值。對於這種查詢變量值的方式,我們把它叫做按引用訪問,因此我們操作的不是實際的值,而是被那個值所引用的對象。

*/

 

[javascript] view plaincopy
  1. /* 
  2. //<strong>4.1.1 動態屬性</strong> 
  3. //引用類型 
  4. var person = new Object(); 
  5. person.name = "Nicholas"; 
  6. alert(person.name);//Nicholas 
  7. //基本類型 
  8. var name = "Nicholas"; 
  9. name.age=27; 
  10. alert(name.age);//undefined 
  11.  
  12. //總結:對於引用類型的值,我們可以爲其添加屬性和方法,也可以改變和刪除其屬性和方法。 
  13. //但是,我們不能給基本型類的值添加屬性,儘管這樣做不會導致任何錯誤。 
  14. */  
[javascript] view plaincopy
  1. /* 
  2. //<strong>4.1.2 複製變量值</strong> 
  3. var num1=5; 
  4. var num2=num1; 
  5. alert(num2); 
  6.  
  7. var obj1=new Object(); 
  8. var obj2 = obj1; 
  9. obj1.name="Nicholas"; 
  10. alert(obj2.name); 
  11. */  

 

 

 

[javascript] view plaincopy
  1. <strong>//4.1.3 傳遞參數</strong>  
  2. /* 
  3. function addTen(num){ 
  4.     num+=10; 
  5.     return num; 
  6. } 
  7. var count=20; 
  8. var result=addTen(count); 
  9. alert(count);//20 
  10. alert(result);//30 
  11. */  
  12.   
  13. /* 
  14. function setName(obj){ 
  15.     obj.name="Nicholas"; 
  16. } 
  17. var person = new Object(); 
  18. setName(person); 
  19. alert(person.name);//Nicholas 
  20. */  
  21.   
  22. /* 
  23. function setName(obj){ 
  24.     obj.name="Nicholas"; 
  25.     obj=new Object(); 
  26.     obj.name="Greg"; 
  27. } 
  28. var person = new Object(); 
  29. setName(person); 
  30. alert(person.name);//Nicholas 
  31. */  
[javascript] view plaincopy
  1. <strong>//4.1.4 檢測類型</strong>  
  2. //基本類型用 typeof 檢測  
  3. var s = "Nicholas";  
  4. var b = true;  
  5. var i = 22;  
  6. var u;  
  7. var n =null;  
  8. var o = new Object();  
  9. alert(typeof s);//string  
  10. alert(typeof b);//boolean  
  11. alert(typeof i);//number  
  12. alert(typeof u);//undefined  
  13. alert(typeof n);//object  
  14. alert(typeof o);//object  
  15.   
  16. //引用類型 result=variable instanceof constructor  
  17. alert(person instanceof Object);  
  18. alert(colors instanceof Array);  
  19. alert(pattern instanceof RegExp);  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章