天天五分鐘-javascript數據類型

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

相關文章
相關標籤/搜索