javascript數據類型分爲基本數據類型與複雜數據類型javascript
基本數據類型包括:string,number,boolean,null,undefined,symbol(es6)java
複雜數據類型包括:objectes6
1.基本數據類型與複雜數據類型存儲上的區分spa
基本數據類型存儲在內存中的棧裏面,複雜數據類型存儲在內存中的堆裏面。.net
基本數據類型的變量指向內存中的數據,而複雜數據類型指向的其實是內存中的地址,而後經過地址獲取數據prototype
基本數據類型值的存儲過程:先在棧裏面聲明一個變量num,而且賦值爲undefined,而後將值1賦值給變量num,聲明變量n,而且賦值undefined,而後將變量num的值賦值給n(這一過程實際是在棧中有聲明瞭另外一個存儲區域,num與n不是經過指針指向同一個棧內存,所以改變num的值並不會使n的值發生改變)指針
1.var num; // undefined 2:num = 1; // 1 3:var n; // undefined 4:n = num; // 1
5:num = 2 // 2
6:console.log(n)// 1
複雜數據類型值的存儲過程:複雜數據類型在聲明瞭以後,會在堆內存中開闢一塊內存區域,用來存放數據。當建立一個對象obj={a: 1}時,會在對內存中開闢一塊空間,用來存儲對象中的數據。code
var obj = {a: 1} var obj1 = obj; obj.a = 2; console.log(obj1.a) // 2
棧與堆的區分:http://www.javashuo.com/article/p-nuwyigbm-nq.html對象
2.javascript數據類型的區分blog
在日常的使用過程當中,常見的類型判斷方法 typeof
var sun1 = undefined; var sun2 = null; var sun3 = true; var sun4 = 10; var sun5 = '123' var sun6 = {a: 1}; var sun7 = [1,2,3]; var sun8 = function(){} var sun9 = new Date(); console.log(typeof sun1); // undefined console.log(typeof sun2); // object console.log(typeof sun3); // boolean console.log(typeof sun4); // number console.log(typeof sun5); // string console.log(typeof sun6); // object console.log(typeof sun7); // object console.log(typeof sun8); // function console.log(typeof sun9); // object
看到上面的結果,發現什麼問題沒?不少的數據類型經過typeof判斷實際是不能被檢測出來的,好比null,new Date()等...
那麼,有什麼其餘的方法能夠進行類型檢測嗎?
Object.prototype.toString.call(),返回一個表示該對象的字符串,例如"[object type]",type表明了數據的類型。
var toString = Object.prototype.toString; toString.call(undefined) // [object Undefined] toString.call(null) // [object Null] toString.call(true) // [object Boolean] toString.call(10) // [object Number] toString.call('123') // [object String] toString.call({}) // [object Object] toString.call([1,2,3]) // [object Array] toString.call(new Date) // [object Date] toString.call(function(){}) // [object Function] toString.call(Math) // [object Math] // JavaScript 1.8.5後修改 toString.call(undefined) // [object Undefined] toString.call(null) // [object Null]
參考地址:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/toString