美文网首页
js类型检测

js类型检测

作者: xiaowenSpring | 来源:发表于2017-08-31 19:24 被阅读0次

    常见的检测方法

    1、typeof value

    typeof返回数据类型的字符串
    例如:"number"、"string"、"boolean"、"undefined"、"function"、 "symbol"
    除了上面几种类型,剩下的都会返回object
    注意:
    1、对未声明和未初始化执行typeof都返回undefined

    2、instanceof

    instanceof用于检测变量是否是给定引用类型的实例
    例如: a instanceof Object/ a instanceof Array /a instanceof RegExp

    • 所有引用类型都是object的实例
    • instanceof检测基本类型都是false
    • 用instanceof检测的时候,只要当前的这个类在实例的原型链上(可以通过原型链proto找到它),检测出来的结果都是true
    3、constructor

    用法类似于instanceof ,在类继承的时候会出错
    例如:

    • function A(){};
      function B(){};
      A.prototype = new B(); //A继承自B
      var aObj = new A();
      alert(aobj.constructor === B) -----------> true;
      alert(aobj.constructor === A) -----------> false;
      alert(aobj instanceof B) ----------------> true;
      alert(aobj instanceof B) ----------------> true;

    言归正传,解决construtor的问题通常是让对象的constructor手动指向自己:
    aobj.constructor = A;
    alert(aobj.constructor === A) ----------->true;
    alert(aobj.constructor === B) ----------->false;

    4、通用的prototype方法

    var a = 1;
    Object.prototype.toString.call(a)
    "[object Number]"
    var a = "1";
    Object.prototype.toString.call(a)
    "[object String]"
    var a = null;
    Object.prototype.toString.call(a)
    "[object Null]"
    var a = undefined;
    Object.prototype.toString.call(a)
    "[object Undefined]"
    var a = true;
    Object.prototype.toString.call(a)
    "[object Boolean]"
    var a = {};
    Object.prototype.toString.call(a)
    "[object Object]"

    var a = function(){};
    Object.prototype.toString.call(a)
    "[object Function]"
    var a = [1,2,3];
    Object.prototype.toString.call(a)
    "[object Array]"

    5、query.type()
    类似于peototype.toString.call(), 返回的结果是undefinded, null ,array,function, boolean, number, object等

    4和5的原理

    • 在toString方法被调用时,会执行下面的操作步骤:
      如果this的值为undefined,则返回"[object Undefined]".
      如果this的值为null,则返回"[object Null]".
      让O成为调用ToObject(this)的结果.
      让class成为O的内部属性[[Class]]的值.
      返回三个字符串"[object ", class, 以及 "]"连接后的新字符串
    • 所有内置对象的[[Class]]属性的值是由本规范定义的.所有宿主对象的[[Class]]属性的值可以是除了"Arguments", "Array", "Boolean", "Date", "Error", "Function", "JSON", "Math", "Number", "Object", "RegExp", "String"之外的的任何字符串.[[Class]]内部属性是引擎内部用来判断一个对象属于哪种类型的值的.需要注意的是,除了通过Object.prototype.toString方法之外,本规范没有提供任何其他方式来让程序访问该属性的值

    摘自:http://www.jb51.net/article/79941.htm

    相关文章

      网友评论

          本文标题:js类型检测

          本文链接:https://www.haomeiwen.com/subject/awiqjxtx.html