基本数据类型:Number String Boolean Undefined Null Symbol
引用数据类型:Object Array Data RegExp function
数据类型的判断方法
数据类型判断有typeof、instanceof、constructor、Object.prototype.toString.call()
typeof
判断基本数据类型都会返回对应的数据类型小写字符 还有引用数据类型中的function 它使用typeof检测也会返回小写的字符
基本数据类型中的Null 还有引用数据类型中的Array,Object,Date,RegExp 不可以使用typeof检测 都会返回一个小写的object
console.log(
typeof 123456, //"number"
typeof 'abc', //"string"
typeof false, //"boolean"
typeof null, //"object"
typeof function(){}, //"function"
)
instanceof
instanceof运算符需要指定一个构造函数,或者说指定一个特定的类型,它用来判断这个构造函数的原型是否在给定对象的原型链上
console.log(
100 instanceof Number, //false
'dsfsf'instanceof String, //false
undefined instanceof Object, //false
null instanceof Object, //false
[1, 2, 3] instanceof Array, //true
function () {}instanceof Function, //true
)
注意:null 和 undefined 都返回false 这是因为他们的数据类型就是他们本身
constructor
根据实例对象寻找属性的 如果对象上没有实例属性或者方法时 就去原型链上寻找 所以实例对象也可以使用此属性
var num = 1111;
var str = 'qwertyuiop';
var bool = true;
var arr = [1, 2, 3, 4];
console.log(
num.constructor==Number,
str.constructor==String,
bool.constructor==Boolean,
arr.constructor==Array,
)
除了除了undefined和null之外,其他类型都可以通过constructor属性来判断类型。
Object.prototype.toString.call()
Object.prototype.toString.call() 原生js最全能的数据类型判断 [object 数据类型]
var ass = Object.prototype.toString
toString.call(123456); //"[object Number]"
toString.call('qwertyuio'); //"[object String]"
toString.call(true); //"[object Boolean]"
toString.call([1, 2, 3, 4]); //"[object Array]"
这样可以看到这个方法判断一个变量的类型是最准确。
基本数据类型和引用数据类型的区别
基本数据类型是原始值,直接存贮在栈内存中,引用数据类型,他的值是在堆内存中开辟了一块新的内存空间,我们通过变量来复制一个引用数据类型的时候其实只是把这个开辟的内存空间的地址进行了一个赋值