js类型判断方法总结

本文详细介绍了JavaScript中`typeof`,`instanceof`,和`constructor`的用法,指出`typeof`只能判断基本类型,而`instanceof`依赖于原型链,存在不准确性。同时提到了使用`toString.call()`进行类型检测的方法。
摘要由CSDN通过智能技术生成
/**
  * todo    typeof、instanceof、constructor类型判断
*/

//* typeof只能判断基本类型,数组、对象等都是Object

console.log(typeof 3 === 'number'); // true
console.log(typeof '3' === 'string'); // true
console.log(typeof false === 'boolean'); // true
console.log(typeof NaN === 'number'); // true

console.log(typeof undefined); // undefined
console.log(typeof {}); // object
console.log(typeof function() {}); // function

console.log(typeof []); // object
console.log(typeof new Set().add(3)); // object
console.log(typeof Symbol); // funtion
console.log(typeof new Map()); // object
console.log(typeof new WeakMap()); // object
console.log(typeof new Function()); // funtion

//* constructor 是从原型上查看对方是什么类型,基本类型(除字符串)都不能判断 --但能改变原型
console.log([].constructor === Array) // true
console.log({}.constructor === Object) // true

console.log('s'.constructor === String) // true

function fn() {}
console.log(fn.constructor === Function)
// 改变原型指向
fn.prototype = Object.prototype
console.log(fn.constructor === Function)

/**
 *! instanceof  检测当前实例是否属于这个类的
 *   + 底层机制:只要当前类出现在实例的原型链上,结果都是true
 *   + 由于我们可以肆意的修改原型的指向,所以检测出来的结果是不准的
 *   + 不能检测基本数据类型
 */

function fun () {
  this.name = 'fn'
}
fun.prototype = Object.create(Array.prototype)

let f = new fun()
console.log(f instanceof Array)
console.log(f instanceof Function)

// TODO:toString.call() 检测
const ruleType =  data => Object.prototype.toString.call(data).slice(8, -1).toLowerCase()
console.log(ruleType(f))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值