js对数据类型的检测方式有哪些

2023-08-27 15:36:35发布
27

typeof,只能检测基本数据类型

console.log(typeof 666)


instanceof,只能检测引用数据类型

console.log([] instanceof Array)


constructor

console.log((2).constructor === Number); // true
console.log((true).constructor === Boolean); // true
console.log(('str').constructor === String); // true
console.log(([]).constructor === Array); // true
console.log((function() {}).constructor === Function); // true
console.log(({}).constructor === Object); // true

constructor有两个作用,一是判断数据的类型,二是对象实例通过 constrcutor 对象访问它的构造函数。需要注意,如果创建一个对象来改变它的原型,constructor就不能用来判断数据类型了:

function Fn(){};
 
Fn.prototype = new Array();
 
var f = new Fn();
 
console.log(f.constructor===Fn);    // false
console.log(f.constructor===Array); // true


Object.prototype.toString.call(), 完美的解决方案

var opt = Object.prototype.toString
console.log(opt.call(2))
console.log(opt.call(true))
console.log(opt.call('abc'))