首先我们要清楚基本类型与引用类型分别是指什么。
基本类型:undefined、null、string、number、boolean、symbol(ES6)
引用类型:Object、Array、RegExp、Date、Function
1.typeof
typeof的返回值一共有七种,分别为"string","number","boolean",“object”,"function","undefined"以及ES6新增的"Symbol"。
如果我们想用 typeof 来判断array,object,还有null类型的话返回的结果都为“object”类型,没办法判断该变量是数组、对象还是空类型。若需要判断array,object,null的话则可以用typeof封装一下
let getType = function (val) {
if (val === null) {
//判断该参数是否为空
return 'null'
} else if (typeof val === 'object') {
//再次判断该参数是否有长度,若有则为数组类型,否则为对象
if (typeof val.length === 'number') {
return 'Array';
} else {
return 'Object'
}
} else {
return '该参数不是array,object,null类型'
}
}
若觉得封装成函数麻烦的可以看下以下几种方法。
2.instanceof
let array = [1, 2, 3];
console.log(array instanceof Array); //true
let obj={};
console.log(obj instanceof Object); // true
3.constructor
let array = [1,2,3,1];
console.log(array.constructor === Array); // true
4、Object.prototype.toString
let array = [1, 2, 3];
let obj = {};
console.log(Object.prototype.toString.call(obj)); //[object Object]
console.log(Object.prototype.toString.call(array)); //[object Array]
这种方法的返回值是一个字符串类型,如果只希望返回值为数据类型,而不包含[object Array]前面的object的话,可以做以下封装
function getType(val) {
let type = Object.prototype.toString.call(val);
return console.log(type.slice(type.length / 2, type.length - 1));
}
let array = [1, 2, 3];
getType(array)
该函数的返回值就仅仅是传入参数的数据类型了。
5.Array.isArray()
好像这种方法只能用于判断数组类型
let array = [1, 2, 3];
console.log(Array.isArray(array)); //true
以上是我个人所得知的几种判断数据类型的几种方法。