• JS数据类型判断的方法


    最常用的判断方法:typeof
    var a='isString';
    var b=121221;
    var c=[1,2,3];
    var d=new Date();
    var e=function(){
    console.log('12');
    };
    var f=function(){
    this.name='22';
    };
    var g=null;
    var h=undefined;
    var i=true;
    
    console.log(typeof b) =======> number
    console.log(typeof a) =======> string
    console.log(typeof h) =======> undefined
    console.log(typeof i) =======> boolean
    console.log(typeof c) =======> object
    console.log(typeof d) =======> object
    console.log(typeof g) =======> object
    console.log(typeof e) =======> function console.log(typeof f) =======> function
    
    

    总结 在 JavaScript 里使用 typeof 来判断数据类型,只能区分基本类型,即 “number”,”string”,”undefined”,”boolean”,”object” 五种。

    对于数组、函数、对象来说,其关系错综复杂,使用 typeof 都会统一返回 “object” 字符串。

    判断已知对象类型的方法 instanceof
    console.log(c instanceof Array) =======> true
    
    console.log(d instanceof Date) =======> true
    
    console.log(f instanceof Function) =======> true
    
    console.log(f instanceof function) =======> false
    

    注意:instanceof 后面一定要是对象类型,并且大小写不能错,该方法适合一些条件选择或分支。

    根据对象的constructor判断: constructor
    console.log(c.constructor === Array) ----------> true
    console.log(d.constructor === Date) -----------> true
    console.log(e.constructor === Function) -------> true
    
    注意: constructor 在类继承时会出错
    eg:
    function A(){};
    function B(){};
    A.prototype = new B(); //A继承自B
    var aObj = new A();
    console.log(aObj.constructor === B) -----------> true;
    console.log(aObj.constructor === A) -----------> false;
    而instanceof方法不会出现该问题,对象直接继承和间接继承的都会报true:
    console.log(aObj instanceof B) ----------------> true;
    言归正传,解决construtor的问题通常是让对象的constructor手动指向自己:
    aObj.constructor = A; //将自己的类赋值给对象的constructor属性
    console.log(aObj.constructor === A) -----------> true;
    console.log(aObj.constructor === B) -----------> false; //基类不会报true了;
    
    繁琐的方法: prototype

    在JavaScript中,想要判断某个对象值属于哪种内置类型,最靠谱的做法就是通过Object.prototype.toString方法.

    console.log(Object.prototype.toString.call(a) === ‘[object String]’) -------> true;
    console.log(Object.prototype.toString.call(b) === ‘[object Number]’) -------> true;
    console.log(Object.prototype.toString.call(c) === ‘[object Array]’) -------> true;
    console.log(Object.prototype.toString.call(d) === ‘[object Date]’) -------> true;
    console.log(Object.prototype.toString.call(e) === ‘[object Function]’) -------> true;
    console.log(Object.prototype.toString.call(f) === ‘[object Function]’) -------> true;
    
    jquery.type()

    测试中所用到的 jquery: verson 3.0.0

    console.log('number:', jQuery.type(2));
    console.log('string:', jQuery.type('test'));
    console.log('true or false :', jQuery.type(true));
    console.log('undefined :', jQuery.type(undefined));
    console.log('', jQuery.type());
    console.log('null:', jQuery.type(null));
    console.log('new Date():', jQuery.type(new Date()));
    console.log('Function:', jQuery.type(function() {}));
    console.log('Array:', jQuery.type([]));
    console.log('Object:', jQuery.type({}));
    console.log('new Error():', jQuery.type(new Error()));
    console.log('reg:', jQuery.type(/test/));
    
    console.log('ES6 新语法:symbol:', jQuery.type(Symbol()));
    

    [参考链接]:https://www.cnblogs.com/dushao/p/5999563.html

  • 相关阅读:
    PyQt(Python+Qt)学习随笔:containers容器类部件QStackedWidget重要方法介绍
    什么叫工业4.0,这篇接地气的文章终于讲懂了
    怎样 真正认识一个 人
    华为的绩效管理:减人、增 效、加薪
    羽毛球战术
    魔方教程
    员工培养:事前指导,事后纠正
    一把手瞄准哪里,核心竞争力就在哪里
    海尔的五次战略变革
    如何提高基层员工的执行力
  • 原文地址:https://www.cnblogs.com/joexin/p/8552319.html
Copyright © 2020-2023  润新知