基本数据类型6个:string、number、Boolean、null、undefined、symbol(ES6新的原始数据类型,代表独一无二的值)
引用数据类型3个:array、object、function
判断是否字符串:
let a = "123";
console.log(typeof a); // string
console.log(a instanceof String); // false
console.log(a.constructor === String) // true
console.log(Object.prototype.toString.call(a) === '[object String]'); // true
判断是否数字:
let a = 123;
console.log(typeof a); // number
console.log(a instanceof Number); // false
console.log(a.constructor === Number) // true
console.log(Object.prototype.toString.call(a) === '[object Number]'); // true
判断是否数组:
let a = [1, 2, 3];
console.log(typeof a); // object
console.log(typeof a == Array); // false
// instanceof
console.log(a instanceof Array); // true
// constructor
console.log(a.constructor == Array); // true
// 此方法比较繁琐,但是管用
console.log(Object.prototype.toString.call(a) === '[object Array]'); // true
判断是否对象:
let a = new Object;
a.color = "red";
console.log(a); // {color: "red"}
console.log(typeof a); // object
console.log(a instanceof Object); // true
console.log(a.constructor == Object); // true
console.log(Object.prototype.toString.call(a) == '[object Object]'); // true
console.log(a.toString() == '[object Object]'); // true 对象类型可以直接调用toString方法
判断是否函数方法:
let a = function () {}
console.log(a); // ƒ () {}
console.log(typeof a); // function
console.log(a instanceof Function); // true
console.log(a.constructor == Function); // true
console.log(Object.prototype.toString.call(a) == '[object Function]'); // true
总结:从上面的例子可以看出,typeof方法可以检测出基本数据类型,但是对于引用数据类型的function类型之外2个都是检测位object;instanceof方法可以判断出引用数据类型,不可以判断基本数据类型;constructor和对象原型的toString方法可以判断所有数据类型。虽然写法是有点繁琐,但还是挺管用的呢。以上总结为本人使用例子做的判断总结,如大家有更好的方法欢迎评论哦~