算法小白,2024年2月21日,开始挑战在掘金发布“每日”系列。 (节假日可能会出门所以不算) 涉及到算法,type challenge 等,感兴趣的小伙伴可以持续关注督促互勉 🚀🚀🚀
算法
题意理解
判断 JavaScript 中,一个类是否是该对象的实例
思路
- 可以使用
instanceof来判断 - 可以根据原型链的规则来判断
- 需要考虑
null和undefined两种情况
解题
原型链判断
const checkIfInstanceOf = function(obj, classFunction) {
if (obj === undefined || obj === null || classFunction === null || classFunction === undefined) {
return false
}
while(obj.__proto__ && obj.__proto__ !== classFunction.prototype) {
obj = obj.__proto__
}
return obj.__proto__ === classFunction.prototype
}
instanceof 判断
// instanceof
const checkIfInstanceOf = function(obj, classFunction) {
if (obj === undefined || obj === null || !(classFunction instanceof Function)) {
return false
}
return Object(obj) instanceof classFunction
}
TypeChallenge
实现类型 IsUnion<T>, 判断类型是否事联合类型
思路
- 对于联合类型,可以利用分布式类型的特点进行遍历
- 和输入类型对比,需要拷贝一份原类型
- 要对 never 特殊处理
解题
type IsUnion<S, T = S> = IsNever<S> extends true
? false : S extends S ? [T] extends [S] ? false : true : never