常用的JavaScript检测类型方式包括typeof、instanceof和Object.prototype.toString.call()方法。它们的原理分别是:
- typeof操作符:typeof操作符可以检查一个值的类型,返回一个字符串。其原理是JavaScript中每个值都有一个内部属性
[[Class]],但typeof只能返回以下几种字符串:undefined、boolean、number、string、bigint、symbol、function、object。这些字符串与内部属性[[Class]]对应,因此可以使用typeof来判断基本数据类型以及函数类型。 - instanceof操作符:instanceof操作符用于检查一个对象是否属于某个类,其原理是在JavaScript中,
每个对象都有一个constructor属性,指向创建该对象的构造函数。通过比较对象的constructor属性与类的prototype属性是否相同,可以确定对象是否属于该类的实例。 - Object.prototype.toString.call()方法:这种检测类型方式可以检测所有类型,并且能够区分出数组、日期等具体类型。其原理是利用了Object.prototype.toString()这个方法,它返回一个表示该对象类型的字符串。例如,Object.prototype.toString.call([])会返回"[object Array]",Object.prototype.toString.call(new Date())会返回"[object Date]"。由于
每种类型的toString方法都不一样,而Object.prototype.toString方法能够调用每种类型的toString方法,所以可以通过调用Object.prototype.toString.call()方法来判断一个值的类型。