1. 程式人生 > >js中的型別和函式引數傳遞型別問題

js中的型別和函式引數傳遞型別問題

js中的型別:

2大型別:原始型別和物件。

原始型別有 boolean、number、string這三個普通原始型別,還有null、undefined這倆特殊原始型別

物件嘛就多了,普通物件、內建物件、全域性物件、函式、陣列等。

函式引數傳遞型別: 

 對於原始型別,傳遞的是值,即複製一份傳入函式,在函式內部修改不影響外部變數本身。

對於物件型別,傳遞的是地址,在函式內部修改物件時會導致外部變數發生變化。

注意這種情況!參考如下程式碼:

var oMyObj = {name:"羅伯特"};

function Test( obj ){
   obj.name = "啊!!!";
   obj = {name: "啊~~~"};
}

Test(oMyObj);

alert(oMyObj.name);

表面上看在內部重新定義了變數,應該結果是“啊~~~”才對,可結果是“啊!!!”。

原因是按地址傳遞,在Test執行時是重新聲明瞭一個obj區域性變數,它指向了外部的oMyObj物件。所以函式第一行起作用。但出現obj = {name:"~~~"}時,是改變了obj的指向為新的物件,並沒有影響到外部oMyObj的指向。