JS基础知识点及常见面试题1.2——JS判断数据类型的几种方式
一、JS判断数据类型的方式包括:typeof、instanceof、constructor、Object.prototype.toString.call()、
二、typeof
console.log(typeof 2) //number console.log(typeof 'abc') //string console.log(typeof true) //boolean console.log(typeof undefined) //undefined console.log(typeof null) //object console.log(typeof 2n); // bigint console.log(typeof Symbol(1)); // symbol console.log(typeof [1,2,3]) //object console.log(typeof {name:'小米'}) //object console.log(typeof /1/) //object console.log(typeof function(){}) //function
1、typeof对于基本数据类型来说,可以判断除null之外所有的基本数据类型
2、typeof对于引用数据类型来说,除了函数会被判断为function,其他(例如:数组、日期、正则等等)都会统一判定为Object
3、所以说typeof并不能准确判断变量到底是什么类型,个人认为判断一些简单的基本数据类型还是可以的
4、typeof null === 'Object' 是一个历史遗留问题,无法修改
5、typeof NaN === 'number'
三、instanceof:通过原型链的方式来判断是否是构造函数的实例
// 对于原始数据类型无法检测 console.log(2 instanceof Number); // false console.log(1n instanceof BigInt); // false console.log(true instanceof Boolean); // false console.log('str' instanceof String); // false console.log(Symbol(1) instanceof Symbol); // false // 可以检测内置对象类型 console.log([] instanceof Array); // true console.log(function(){} instanceof Function); // true console.log({} instanceof Object); // true console.log(/1/ instanceof RegExp); // true // 所有函数对象实例原型链上都存在Function console.log(Array instanceof Function); // true console.log(Date instanceof Function); // true console.log(RegExp instanceof Function); // true console.log(Function instanceof Function); // true console.log(Object instanceof Function); // true // Object 是所有实例对象原型链的尽头 console.log(Array instanceof Object); // true console.log(Date instanceof Object); // true console.log(RegExp instanceof Object); // true console.log(Function instanceof Object); // true console.log(Object instanceof Object); // true //instanceof 能够判断引用数据类型,但由于是查找原型链,所以不能很精准指出数据类型 console.log([] instanceof Array); // true console.log([] instanceof Object); // true
1、instanceof不能判断基本数据类型
2、instanceof 能够判断引用数据类型,但由于是查找原型链,所以不能很精准指出数据类型
3、当构造函数的 prototype 发生改变时,会导致 instanceof 结果发生改变
4、这其实也侧面反映了一个问题:instanceof 并不是百分之百可信的,所以 instanceof 用于判断数据类型也存在弊端
四、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()

浙公网安备 33010602011771号