判断数据类型的方法

一、typeof

typeof只能判断基本的数据类型,面对对象类型、null、Array返回的都是Object类型

	注意:使用typeof判断function时,返回的是function。

二、Object.prototype.toString.call()

在javascript中,所有数据类型的父类都是Object,每一个继承Object的对象都有toString方法,因此在没有重写toString的情况下。toString方法返回的是[Object type],其中type是对象的类型,除了Object类型的对象外,其他类型直接使用 toString 方法时,会直接返回都是内容的字符串,所以我们需要使用call或者apply方法来改变toString方法的执行上下文。

使用Object.prototype.toString.call()判断数据类型的好处就是,
所有基本的数据类型都能进行判断,包括null和undefined

三、instanceof

instanceof的具体判断流程如下:

function instanceof (A, B) {
    var O = B.prototype;
    var A = A.__proto__;
    while(true) {
        if (A === null) {
            return false;
        }else if(O === A) {
            return true;
        }
        A = A.__proto__;
    }
}

上面的判断过程可以看出,instanceof 的内部机制是通过判断对象的原型链中是不是能找到类型的 prototype。其实原型链的查找过程。A instanceof Array;这个判断的过程其实就是查找A的原型链中是否能找到B.prototype。

注意:instanceof 只能用来判断对象类型,原始类型不可以。
var str = '2233';
str instanceof String; // false;
var strObj = new String('2233');
strObj instanceof String // true

四、constructor方法

constructor属性返回对创建此对象的数组函数的引用。就是返回对象相应的构造函数。

[].constructor === Array // true;
var obj = new Object();
obj.constructor === Object // true;
"string".constructor === String // true
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值