javascript类型判断(typeof instanceof ,toStirng.call())

javascript类型判断(typeof instanceof ,toStirng.call())

对typeof instanceof Object.prototype.toString.call(),比较

  • 最近写代码时遇到了对一个变量是arry还是String进行判断,开始使用typeof,发现有问题,来了兴致就把这个方面都研究了下.

    typeof

    function testTypeof(){
    var str ="aa";
    var obj = {};
    var num = 99;
    var bl = true;
    var nu = null;
    var und  ;
    
    function  Person(name){
        this,name = name;
    };
    var person = new Person("aa");
    var arr = [];
    var data = Date.now();
    var reExp = /\[bc\]at/i;
    var fu = function fu(){};
    
    console.log(typeof str ); //String
    console.log(typeof str=='object' ); //false
    
    console.log(typeof obj ); //object
    console.log(typeof str=='object' ); //false
    
    console.log(typeof num ); //number
    console.log(typeof str=='object' ); //false
    
    console.log(typeof bl ); //boolean
    console.log(typeof str=='object' ); //false
    
    console.log(typeof nu ); //object
    console.log(typeof str=='object' ); //false
    
    console.log(typeof und ); //undefined
    console.log(typeof str=='object' ); //false
    
    console.log(typeof person ); //object
    console.log(typeof str=='object' ); //false
    
    console.log(typeof arr ); //object
    console.log(typeof str=='object' ); //false
    
    console.log(typeof data ); //number
    console.log(typeof str=='object' ); //false
    
    console.log(typeof reExp ); //object
    console.log(typeof str=='object' ); //false
    
    console.log(typeof fu ); //function
    console.log(typeof str=='object' ); //false
    
    }
    • 总结:在基本类型 String,Number,boolean,undefined function 类型判断时可以使用

instanceof

function testInstanceof(){
    var str ="aa";
    var obj = {};
    var num = 99;
    var bl = true;
    var nu = null;
    var und  ;

    function  Person(name){
        this,name = name;
    };
    var person = new Person("aa");

    var arr = [];
    var data = Date.now();
    var reExp = /\[bc\]at/i;
    var fu = function fu(){};

    console.log(str instanceof String); //false
    console.log(str instanceof Object); //false

    console.log(obj instanceof Object); //true

    console.log(num instanceof Number); //false
    console.log(num instanceof Object); //false

    console.log(bl instanceof Boolean); //false
    console.log(bl instanceof Object); //false

    console.log( nu instanceof Object ); //false

    console.log(und instanceof Object  ); //false


    console.log(person instanceof Person ); //true
    console.log(person instanceof Object ); //true

    console.log(arr instanceof Array); //true
    console.log(arr instanceof Object ); //true

//    console.log(data instanceof Data); //false
    console.log(data instanceof Object); //false

  //  console.log(reExp instanceof ReExp ); //false
    console.log(reExp instanceof Object ); //true

    console.log(fu instanceof Function); //true,
    console.log(fu instanceof Object); //true
}
  • 总结:如上所看,instanceof 在引用类型方面使用比较合适,原始object,自定义对象,Function,特别是自定义对象

Object.prototype.toString.call()

function testStirngCall(){
    var str ="aa";

    var obj = {};
    var num = 99;
    var bl = true;
    var nu = null;
    var und  ;

    function  Person(name){
        this,name = name;
    };
    var person = new Person("aa");

    var arr = [];
    var data = Date.now();
    var reExp = /\[bc\]at/i;
    var fu = function fu(){};

    console.log(Object.prototype.toString.call(str)); //[object String]

    console.log(Object.prototype.toString.call(obj)); //[object Object]

    console.log(Object.prototype.toString.call(num)); //[object Number]

    console.log(Object.prototype.toString.call(bl)); // [object Boolean]
    console.log(Object.prototype.toString.call(nu)); //[object Null]
    console.log(Object.prototype.toString.call(und)); //[object Undefined]
    console.log(Object.prototype.toString.call(person)); // [object Object]
    console.log(Object.prototype.toString.call(arr)); // [object Array]
    console.log(Object.prototype.toString.call(data)); // [object Number]
    console.log(Object.prototype.toString.call(reExp)); // [object RegExp]
    console.log(Object.prototype.toString.call(json)); // [object Function]
}
  • 除了自定义对像person,不能识别,其他都能识别,完胜


总结:自定义对像( var person = new Person())用instanceof ,其他使用String.prototype.toString().call(),这样才能尽可能的避免问题

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值