1、 六種簡單數據類型:Undefined、Null、Boolean、Number、String、Symbol(新增); 一種複雜數據類型:Object; (1)基本數據類型保存在棧記憶體中,是按值傳遞的,因為可以直接操作保存在變數中的實際值; (2)引用數據類型是保存在堆記憶體中的對象;與其他語言的不 ...
1、 六種簡單數據類型:Undefined、Null、Boolean、Number、String、Symbol(新增);
一種複雜數據類型:Object;
(1)基本數據類型保存在棧記憶體中,是按值傳遞的,因為可以直接操作保存在變數中的實際值;
(2)引用數據類型是保存在堆記憶體中的對象;與其他語言的不同是,JavaScript沒有按引用傳遞,而是傳遞引用類型的參數(是按值傳遞,按引用訪問),你不可以直接訪問堆記憶體空間中的位置和操作堆記憶體空間,只能操作對象在棧記憶體中的引用地址;
(3)typeof 操作符適合確定除 Null 以外的簡單數據類型;
1 var a = "hyd"; 2 var b = ture; 3 var c = null; 4 var d = new Object(); 5 6 alert(typeof a); //string 7 alert(typeof b); //boolean 8 alert(typeof c); //object 9 alert(typeof d); //object
(4) instanceof 操作符可以用來判斷new 出來基本類型(簡單數據類型);
1 var a = new String("hyd"); 2 alert(a instanceof String); //true 3 4 var b = "hyd"; 5 alert(b instanceof String); //false
2、 引用類型:Object、Array、Function、Date、RegExp、基本包裝類型、單體內置對象(特殊引用類型);
(1)引用類型是一種數據結構,用以將數據和功能組合在一起;
(2)使用 new 創建的均為 Object 類型,所有引用類型預設都繼承自 Object ;
(3)使用 typeof 操作符無法有效區分引用類型,只能知道他是對象,而不能知道是什麼類型的對象,此時使用 instanceof 操作符;
1 var o = new Object(); 2 var a = new Array(); 3 var r = new RegExp(); 4 5 alert(o instanceof Object); //true 6 alert(a instanceof Object); //true 7 alert(r instanceof Object); //true 8 //檢測一個引用類型值與Object構造函數時,始終返回ture 9 10 alert(a instanceof Array); //true 11 alert(r instanceof RegExp); //true
3、 基本包裝類型:Boolean、Number、String;
(1)基本包裝類型首先是基本類型,同時是特殊引用類型;
(2)自動創建的基本包裝類型的對象,只存在與一行代碼執行瞬間,而使用new運算符創建的引用類型的實例,在執行流離開當前作用域之前一直保存在記憶體中;
PS:typeof 檢測函數返回"function";
Safair 5 及Chrome 7 之前,typeof 檢測正則表達式返回"function";
ECMA-262規定:內部實現 [[call]] 方法的對象都應該在typeof 操作符時候返回“function”!
IE 與 Firefox 中,typeof 檢測正則表達式返回"object";