【JS中判断数据类型的方法:】

1.typeof:

typeof 右侧跟一个一元表达式,返回表达式的数据类型。

<script>
        console.log(typeof 'a');//string
        console.log(typeof 2);//number
        console.log(typeof true);//boolean
        console.log(typeof Symbol());//Symbol
        console.log(typeof undefined);//undefined
        console.log(typeof new Function());//function
        console.log(typeof null);//object
        console.log(typeof [2,3]);//object
</script>

由代码我们可以知道,typeof方法有时无法返回我们想要的效果。

总结:

(1)当typeof判断除null之外的基本数据类型时,都可以返回正确的结果。

(2)当typeof判断除function之外的引用数据类型时,都返回的是原型链顶端的Object类型。

2.instanceof:

instanceof 是用来判断 a是否为 b的实例,instanceof运算符需要指定一个构造函数,或者说指定一个特定的类型,它用来判断这个构造函数的原型是否在给定对象的原型链上。表达式为:a instanceof b,如果 a是 b 的实例,则返回 true,否则返回 false。

代码:

<script>
    let num = 123;
        console.log(123 instanceof Number);//false
        console.log(num instanceof Number);//false
        console.log('acdjboq' instanceof String);//false
        console.log(true instanceof Boolean);//false
        console.log(false instanceof Boolean);//false
        console.log(undefined instanceof Object)//false
        console.log(null instanceof Object);//false
            
        console.log(
            [1, 2, 3] instanceof Array, //true
            { a: 1, b: 2, c: 3 } instanceof Object, //true
            function () { console.log('aaa'); } instanceof Function, //true
            new Date() instanceof Date, //true
            /^[a-zA-Z]{5,20}$/ instanceof RegExp, //true
            new Error() instanceof Error //true
        );
</script>

由代码可见,instanceof在判断基本数据类型时,不能正确的返回值。但是我们可以用生成实例的方法来判断属于哪种类型。代码如下:

<script>
     var num=new Number(123);
        console.log(num instanceof Number);//true

        var str=new String('aabbcc');
        console.log(str instanceof String);//true

        var boolean=new Boolean(false);
        console.log(boolean instanceof Boolean);//true
         //.....
</script>

注意:由于null和undefined的类型是它们自身,所以返回的也是false.

总结:instanceof只能判断引用数据类型且是由构造函数生成的实例的数据类型。

下面我们来用代码演示instanceof的原理:

<script>
function _instance_of(left,right){
            const instanceLeft=left.__proto__;
            const constructorRight=right.prototype;
            if(instanceLeft===constructorRight){
                console.log('true');
            }else{
                console.log('false');
            }
        }
        _instance_of(4,Number);//true
        _instance_of([1,2,3],Array);//true
        _instance_of(false,Boolean);//true
        _instance_of('a',String);//true
        _instance_of({relname:'张三',age:18},Object);//true
</script>

3.constructor:

constructor和instanceof的用法和原理是类似的,它也是利用原型链来判断的。xxx.constructor===数据类型,如果生成实例的构造函数等于右侧的数据类型,则返回TRUE。

代码演示:

<script>
     let arr=new Array(1,2,3);
        let obj=new Object({relname:'张三',age:18});
        let fn=new Function();
        console.log(arr.constructor===Array);//true
        console.log(obj.constructor===Object);//true
        console.log(fn.constructor===Function);//true
</script>

        

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值