关于javascript:02判断数据类型

判断变量类型

1.typeof:
对于原始类型来说,除了null都会显示正确的类型
对于对象来说,除了函数都会显示object,所以说typeof并不能精确判断变量到底是什么类型
最好是只用typeof来判断根本数据类型(包含symbol),防止对null的判断

2.instanceof能够精确的判断一个对象的正确类型,因为其外部机制是通过原型链来判断的
然而 instanceof 也可能判断不精确,比方一个数组,他能够被 instanceof 判断为 Object。

 function new_instance_of(leftVaule, rightVaule) { 
        let rightProto = rightVaule.prototype; // 取右表达式的 prototype 值
        leftVaule = leftVaule.__proto__; // 取左表达式的__proto__值
        while (true) {
            if (leftVaule === null) {
                return false;    
            }
            if (leftVaule === rightProto) {
                return true;    
            } 
            leftVaule = leftVaule.__proto__ 
        }
    }

instanceof 次要的实现原理就是只有左边变量的 prototype 在右边变量的原型链上即可。
因而,instanceof 在查找的过程中会遍历右边变量的原型链,直到找到左边变量的 prototype,如果查找失败,则会返回 false,通知咱们右边变量并非是左边变量的实例。

3.还有一种办法是用 Object.prototype.toString.call() 能够对一个变量类型进行比拟精确的判断

Object.prototype.toString.call({a:'hi'}) // [object Object]
Object.prototype.toString.call([1,'a'])  // [object Array]
Object.prototype.toString.call(() => {}) // [object Function]
Object.prototype.toString.call(null)     // [object null]

总结:

typeof null // ‘Object’

判断数组的办法:应用 Object.prototype.toString.call(数组)

判断空对象的办法: 应用instanceof

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理