JS 判断数据类型方法

JS数据类型主要分为
基本数据类型:UndefinedNullBooleanNumberString

应用类型:ObjectArrayFunction

类型判断

1.对 boolean 类型的判断总结

为false时:空字符串 '' 、undefined、0、NAN、null

为true时:除上述false的情况都为true

此判断会经常应用于判断一个变量是否有返回的if 语句中

var o = { 
          'name':'lee'
        };
var a = ['reg','blue'];
function checkBoolean(a){
         if(a){
              return true;
         }else{
              return false;
         }
 }
console.log(checkBoolean('')); //false
console.log(checkBoolean(0)); //false
console.log(checkBoolean(null)); //false
console.log(checkBoolean(undefined)); //false
console.log(checkBoolean(NaN)); //false
console.log(checkBoolean(a));//true
console.log(checkBoolean(c));//true

2. typeof 

    var fn = function(n){
          console.log(n);
       }
       var str = 'string';
       var arr = [1,2,3];
       var obj = {
           a:123,
           b:456
       };
       var num = 1;
       var b = true;
       var n = null;       var u = undefined;
       //方法一使用typeof方法。
       console.log(typeof str);//string
       console.log(typeof arr);//object
       console.log(typeof obj);//object
       console.log(typeof num);//number
       console.log(typeof b);//boolean
       console.log(typeof n);//null是一个空的对象
       console.log(typeof u);//undefined
       console.log(typeof fn);//function

typeof检测的Array和Object  结果都为object

3.instanceof

var o = { 
           'name':'lee'
         };
 var a = ['reg','blue'];
 console.log(o instanceof Object);// true
 console.log(a instanceof Array);//  true
 console.log(o instanceof Array);//  false

 console.log(a instanceof Object);// true  由于数组也属于对象因此我们使用instanceof判断一个数组是否为对象的时候结果也会是true

instaceof只可以用来判断数组和对象,不能判断string和boolean类型

 下面为封装方法进行改进

var o = { 
          'name':'lee'
        };
var a = ['reg','blue'];
var getDataType = function(o){
            if(o instanceof Array){
                return 'Array'
            }else if( o instanceof Object ){
                return 'Object';
            }else{
                return 'param is no object type';
            }
       };
console.log(getDataType(o));//Object。
console.log(getDataType(a));//Array。

4.constructor

var o = { 
           'name':'lee'
        };
var a = ['reg','blue'];
console.log(o.constructor == Object);//true
console.log(a.constructor == Array);//true

此方法不能判断 null 和 undefined。

5.tostring()

var o = { 
          'name':'lee'
        };
var a = ['reg','blue'];
function c(name,age){
         this.name = name;
         this.age = age;
 }
var c = new c('kingw','27');
console.log(Object.prototype.toString.call(a));//[object Array]
console.log(Object.prototype.toString.call(o));//[Object Object]
console.log(Object.prototype.toString.call(c));//[Object Function]
console.log(Object.prototype.toString.call(new c));//[Object Object]
 function isType(obj){ 
  var type = Object.prototype.toString.call(obj);
  if(type == '[object Array]'){
    return 'Array';
  }else if(type == '[object Object]'){
    return "Object" }
  else{
    return 'param is no object type'; }
 }
console.log(isType(o));//Object console.log(isType(a));//Array

//下面是更简洁的封装,来自vue源码
var _toString = Object.prototype.toString;
function toRawType (value) {return _toString.call(value).slice(8, -1)}

6.JQ 的isPlainObject();.isPlainObject();.isArray(obj);$.isFunction(obj)进行判断。

原文地址:https://www.cnblogs.com/benbonben/p/15353992.html