之前项目中获取数据类型的getType是用的
typeof
结合instanceof
来做的,首先这样做是可以的,但并不是一个好办法,因为手动枚举是不靠谱的,不具备完整性。
第一,有可能忽略某些类型;第二,ES 有会继续增加新的类型,如Symbol
BigInt
等。
刚好项目中用到了WeakMap
和WeakSet
,需要进行数据类型判断,老版本的getType就没办法获取正确的数据类型。
function getType(x: any): string {
const originType = Object.prototype.toString.call(x) // '[object Array]'
const spaceIndex = originType.indexOf(' ') // 获取空格的索引
const type = originType.slice(spaceIndex + 1, -1) // 根据索引截取字符串
return type.toLowerCase() // 转小写
}
为什么新getType里面用的都是字符串操作,为什么不直接分割成数组再直接获取数据呢?字符串操作的时间比数组操作更快。