////每種語言數據類型是最基礎的東西了,今天被javascript的基本類型和引用類型搞暈,主要是在函數中的傳遞,所有數據都是按照“值”來傳遞的。
////剛開始看到李鬆峯老師 翻譯的 《JavaScript 高級程序設計 第二版》中第四章介紹,傳遞參數,(函數傳遞參數)都是按照值來傳遞。這裏並不說所有情況都是按照值來傳遞。對於引用類型數值還是按照引用地址來傳遞。
javascript的數據類型
值類型:數值、布爾值、null、undefined。
引用類型:對象、數組、函數。
這裏插入一個個人對值的引用和地址引用的理解。
假如在我的書架上有很多本書,一個朋友找我來借書。
第一種方法:我告訴他的書的名字《失控》,這是一本不錯的書。你自己去書架上找吧。-- -- --固定值的引用
第二種方法:我告訴他第三排第8本(這是一個地址),你去拿。-- -- --按照地址的引用
圖中A:對應第一種方法,當告訴了b的書名爲1這個值之後,這時候a變量可以任意去改變書架上的書。a會被賦值,但是b依然會取得1這個值。
圖中B對應第二種方法,只是告訴了b的一個地址,(數組屬於引用類型)賦值時只是傳遞了一個地址。取中間第一排的三本,但是在這之前a來了,將一本書《javascript權威指南》插入到了中間的最前面,這是b再按照這個地址取書,就會發生變化了。
===================================
此時,基本類型和引用類型的引用應該能夠理解了吧。
看下面例子;
++++基本類型++++
var a = 3.14; //聲明並初始化一個變量
var b = a; //把該變量複製到一個新變量
a = 4; //修改原始變量的值
alert(b); //顯示3.14;副本沒有改變
++++引用類型++++
var a = [1,2,3]; //初始化一個引用數組的變量
var b = a; //把該引用複製到一個新變量
a[0] = 100; //用原始引用修改數組
alert(b); //新引用顯示改變後的數組[100,2,3]
++++++++++++++++++++++++++++最後一個比較難纏問題String
字符串是基本數據類型,String對象是引用類型,基本數據類型字符串在進行對象操作時會臨時轉化爲String對象,
所以會出現令人費解的情況,而JS String對象和其他對象一樣只是普通的引用。
記住一點:string對象是引用類型,但是是按照值的傳遞方式計算。
JavaScript 的函數傳遞參數是值傳遞?還是值傳遞?對就是值傳遞……
avaScript 函數傳遞參數時,是值傳遞。雖然您可能不信,因爲ECMAScript 變量可能包含兩種不同數據類型的值:基本數據類型,和引用數據類型。難道引用數據類型傳遞的時候難道也是值傳遞嗎?答,沒錯。
具體介紹參考:http://www.xiaoxiaozi.com/2010/03/05/1719/