1. 程式人生 > >基本引用型別和物件引用型別區別

基本引用型別和物件引用型別區別



一、基本型別和引用型別概述

js中資料型別的值包括:基本型別值和引用型別值

基本資料型別:undefined;null;boolean;number;string

引用型別值:儲存在記憶體中,js不允許直接訪問記憶體位置,因此時操作引用而不是實際物件

二、如何檢測資料型別

1.基本資料型別的檢測:使用typeof

[javascript] view plain copy print?在CODE上檢視程式碼片派生到我的程式碼片
  1. var s = “AAA”;  
  2. alert(typeof s);    //返回string 
var s = “AAA”;
alert(typeof s);    //返回string 

`     2.引用型別(物件

型別)檢測:使用instanceof

[javascript] view plain copy print?在CODE上檢視程式碼片派生到我的程式碼片
  1. alert(person instanceof Object);  
  2. alert(person instanceof Array);  
  3. alert(person instanceof Regexp);  
alert(person instanceof Object);
alert(person instanceof Array);
alert(person instanceof Regexp);

3.特殊情況:instanceof檢測object始終返回true,檢測基本型別的時候始終返回false(因為基本型別不是物件)

     typeof檢測函式時返回Function,檢測正則表示式時返回Object


三、基本型別和引用型別的區別

1.引用型別可以新增屬性,基本型別不可以

2.複製時,基本型別是直接複製了一個新的變數,新舊兩個變數之間沒有關係;

   引用型別也複製了新的變數,但這個變數是一個指標,新舊兩個指標指向同一個物件

3.函式的引數傳遞:所有的引數傳遞原理都是將外部的變數通過複製的方式傳遞給函式的引數。因此,函式內部對引數的操作對外部原變數無影響

下面分別以引數為基本型別和引用型別為例進行驗證:

[javascript] view plain copy print?在CODE上檢視程式碼片派生到我的程式碼片
  1. function
     addTen(num){  
  2.     num += 10;  
  3.     return num;  
  4. }  
  5. var count = 20;  
  6. var result = addTen(count);  
  7. //這裡內部對num的操作不會影響外部count的值
  8. function setName(obj){  
  9.     obj.name = “Nicholas”;  
  10.     obj = new Object();  
  11.     obj.name = “Greg”;  
  12. }  
  13. var person = new Object();  
  14. setName(person);  
  15. alert(person.name);    //返回”Nicholas”,說明仍然不影響外部的person物件的name