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