JS 类型判断 完善版

事情是这样的,typeof可以正确判断除了null之外的原始数据类型(typeof null === object),instanceof可以判断复杂数据类型,但是不能正确判断基本数据类型(为什么?因为instanceof操作不了,操作对象必须是某一个构造函数的实例,我们没法往后面放构造函数)。
先看一下typeof能做的事情:

console.log(typeof undefined); // undefined
console.log(typeof 1); // number
console.log(typeof '1'); // string
console.log(typeof true); // boolean
console.log(typeof sym); // symbol
console.log(typeof null); // object

我们要完善一下,让instanceof可以正确判断所有类型.

首先我们看一个小工具,这个叫做自定义instanceof行为
MDN的解释:
在这里插入图片描述

class OriginNumber {
    
    
	static [Symbol.hasInstance] (instance) {
    
    
		return typeof instance === 'number'
	}
}
console.log(1 instanceof OriginNumber) // true

这样可以让instanceof正确判断number类型的变量
其余原始类型的都一样
除了null

class OriginNull {
    
    
	static [Symbol.hasInstance] (instance) {
    
    
		return instance === null
	}
}

console.log(null instanceof OriginNull) // true

由于复杂类型本来就可以判断 我们就不自己写了。
只是看一下结果:

console.log([] instanceof Array); // true
console.log(obj instanceof Object); // true
console.log(function foo() {
    
     } instanceof Function); // true
console.log(function foo() {
    
     } instanceof Object); // true

就先这样吧。手写instanceof已经写在另一篇里面了。

猜你喜欢

转载自blog.csdn.net/weixin_45543674/article/details/121481879