zoukankan      html  css  js  c++  java
  • js之检测对象类型

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>检测数据类型</title>
    </head>
    <body>
        <script>
            /*检测字符串、数值、布尔值、undefined*/
            /*神器之 typeof*/
            var s="lily",
                b=true,
                i=22,
                u,
                n=null,
                o=new Object();
            console.log(typeof s);
            console.log(typeof b);
            console.log(typeof i);
            console.log(typeof u);
            console.log(typeof n);
            console.log(typeof o);
            /*ECMA-262规定任何在内部实现[[call]]方法的对象都应该在应用typeof操作符时返回"function"*/
            /*检测引用类型变量*/
            /*神器之 instanceof*/
            /*result=variable instanceof constructor*/
            var person=new Object,
                colors=new Array,
                pattern=new RegExp;
            console.log(person instanceof Object);
            console.log(colors instanceof Array);
            console.log(pattern instanceof RegExp);
            /*神器之 constructor*/
            console.log(person.constructor);
            console.log(colors.constructor);
            console.log(pattern.constructor);
            /*注意: constructor 在类继承时会出错
                eg,
                      function A(){};
                      function B(){};
                      A.prototype = new B(); //A继承自B
                      var aObj = new A();
                      alert(aobj.constructor === B) -----------> true;
                      alert(aobj.constructor === A) -----------> false;
                而instanceof方法不会出现该问题,对象直接继承和间接继承的都会报true:
                      alert(aobj instanceof B) ----------------> true;
                      alert(aobj instanceof B) ----------------> true;
                言归正传,解决construtor的问题通常是让对象的constructor手动指向自己:
                      aobj.constructor = A; //将自己的类赋值给对象的constructor属性
                      alert(aobj.constructor === A) -----------> true;
                      alert(aobj.constructor === B) -----------> false; //基类不会报true了;
            */
            /*神器之 prototype*/
            var a=Object.prototype.toString.call(person),
                b=Object.prototype.toString.call(colors),
                c=Object.prototype.toString.call(pattern);
            console.log(a.split("").slice(8,-1).join(""));
            console.log(b.split("").slice(8,-1).join(""));
            console.log(c.split("").slice(8,-1).join(""));
        </script>
    </body>
    </html>

    检测类型方法总结:

    1 typeof

    2 instanceof

    3 constructor

    4 Object.prototype,toString.call()

    放下过去,才能迎接未来! 未来的每一天我都要过的精彩!
  • 相关阅读:
    option 变为不可选
    html表格 横跨多行跨多列
    ultraEdit 关键字颜色 与 字体模糊 解决办法
    更改U盘 硬盘背景
    js 函数带值。调用
    Blitz: a collection of software designed to support a universitylevel course on Operating Systems
    不错的Qt入门
    Linux命令行技巧zz
    rvalue_references
    http://channel9.msdn.com/
  • 原文地址:https://www.cnblogs.com/lilylearning1992/p/4720867.html
Copyright © 2011-2022 走看看