js的数据类型分为两种:基本数据类型和引用型数据类型
基本数据类型(也叫简单数据类型)分别是:Number 、String、Boolean、BigInt、Symbol、Null、Undefined。其中的Symbol是es6新增的数据类型,这种的数据类型特点就是没有重复值,数据的创建的方法Symbol()。因为Symbol创建的数据类型具有唯一性,所以Symbol() !== Symbol()
引用型数据类型(也叫复杂数据类型)一般用Object代表:普通对象,数组,正则,日期,Math数学函数都属于Object。
下面就是数据类型的校验方法
第一种:typeof
typeof一般用于校验基本数据类型,因为对于引用型数据类型他只会返回object不太好用
function会返回function
console.log(typeof '') //string
console.log(typeof 1) // number
console.log(typeof false) // boolean
console.log(typeof NaN) // number
console.log(typeof undefined) // undefined
console.log(typeof null, 123) // object
console.log(typeof new Object()) // object
console.log(typeof {}) // object
console.log(typeof new Array()); // object
console.log(typeof [1, 2]); // object
console.log(typeof new Date()); // object
console.log(typeof function () { }); // function
第二种:instanceof
instanceof校验数据类型他会返回ture或false,但是在校验基本数据型他会返回false
var aa = new Array()
console.log(aa instanceof Array); // true
console.log({} instanceof Object); // true
console.log(123 instanceof Number) // false
console.log('' instanceof String) // false
第三种:constructor
var obj = 123
console.log(obj.constructor === Number) // true
var obj1 = []
console.log(obj1.constructor === Array) // false
console.log(obj1.constructor === Object) // false
第四种:Object.prototype.toString
console.log(Object.prototype.toString); // toString() { [native code] }
console.log(Object.prototype.toString.call([]).slice(8,-1)) // Array
console.log(Object.prototype.toString.call({}).slice(8,-1)) // Object
console.log(Object.prototype.toString.call({}).slice(8,-1).toLowerCase()) // object
console.log(Object.prototype.toString.call(123).slice(8,-1)) // Number
console.log(Object.prototype.toString.call(123).slice(8,-1).toLowerCase()) // number
最后我们可以使用上面的方法校验各种数据类型
function fn(obj){
let type = typeof obj;
if(type!=='object'){ //判断出是否是基本数据类型
return console.log(type);
}
return console.log(Object.prototype.toString.call(obj).slice(8,-1).toLowerCase());
}
fn({}); // 打印object
fn([]); // 打印array
fn(Symbol()); // 打印symbol
fn(''); // 打印string
fn(); // 打印undefined
fn(null); // 打印null
fn(123); // 打印number
fn(true); // 打印boolean