zoukankan      html  css  js  c++  java
  • 判断数据类型的方法

    typeof

    如果使用typeof来判断数据类型的话,结果如下:

    console.log(
        typeof 123, //"number"
        typeof 'dsfsf', //"string"
        typeof false, //"boolean"
        typeof [1,2,3], //"object"
        typeof {a:1,b:2,c:3}, //"object"
        typeof function(){console.log('aaa');}, //"function"
        typeof undefined, //"undefined"
        typeof null, //"object"
        typeof new Date(), //"object"
        typeof /^[a-zA-Z]{5,20}$/, //"object"
        typeof new Error() //"object"
    );

    Number,String,Boolean,Function,undefined,如果想判断这几种类型,那就可以使用typeof。

    Array,Object,null,Date,RegExp,Error这几个类型都被typeof判断为object,所以如果想要判断这几种类型,就不能使用typeof了。

    instanceof

    除了使用typeof来判断,还可以使用instanceof。instanceof运算符需要指定一个构造函数,或者说指定一个特定的类型,它用来判断这个构造函数的原型是否在给定对象的原型链上.

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

    Number,String,Boolean没有检测出他们的类型,但是如果使用下面的写法则可以检测出来:

    var num = new Number(123);
    var str = new String('dsfsf');
    var boolean = new Boolean(false);

    还需要注意null和undefined都返回了false,这是因为它们的类型就是自己本身,并不是Object创建出来它们,所以返回了false。

    constructor(不能用于undefined和null)

    constructor是prototype对象上的属性,指向构造函数。根据实例对象寻找属性的顺序,若实例对象上没有实例属性或方法时,就去原型链上寻找,因此,实例对象也是能使用constructor属性的。

    console.log(new Number(123).constructor)
    //ƒ Number() { [native code] }
    
    
    var num=123;
    console.log(num.constructor)
    //ƒ Number() { [native code] }

    可以使用num.constructor==Number来判断一个变量是不是Number类型的。

    toString()检测对象类型(使用Object.prototype.toString.call()的方式来判断一个变量的类型是最准确的方法.)

    可以通过toString() 来获取每个对象的类型。为了每个对象都能通过 Object.prototype.toString() 来检测,需要以 Function.prototype.toString.call() 或者 Function.prototype.toString.apply() 的形式来调用,传递要检查的对象作为第一个参数,称为thisArg。

    var toString = Object.prototype.toString;
    
    toString.call(123); //"[object Number]"
    toString.call('abcdef'); //"[object String]"
    toString.call(true); //"[object Boolean]"
    toString.call([1, 2, 3, 4]); //"[object Array]"
    toString.call({name:'wenzi', age:25}); //"[object Object]"
    toString.call(function(){ console.log('this is function'); }); //"[object Function]"
    toString.call(undefined); //"[object Undefined]"
    toString.call(null); //"[object Null]"
    toString.call(new Date()); //"[object Date]"
    toString.call(/^[a-zA-Z]{5,20}$/); //"[object RegExp]"
    toString.call(new Error()); //"[object Error]"

    封装一个获取变量准确类型的函数

    function gettype(obj) {
      var type = typeof obj;
    
      if (type !== 'object') {
        return type;
      }
      //如果不是object类型的数据,直接用typeof就能判断出来
    
      //如果是object类型数据,准确判断类型必须使用Object.prototype.toString.call(obj)的方式才能判断
      return Object.prototype.toString.call(obj).replace(/^[object (S+)]$/, '$1');
    }
  • 相关阅读:
    《原则》读书笔记
    mvn + testng + allure 生成自动化测试报告
    poj3264RMQ
    poj3928pingpong区间和
    uva11361数位dp
    Poj2795Exploring PyramidsDp
    uva11137Dp
    uva11375Dp
    三道组合题
    poj1379模拟退火
  • 原文地址:https://www.cnblogs.com/ceceliahappycoding/p/10563708.html
Copyright © 2011-2022 走看看