美文网首页
typeof与instanceof用法小记

typeof与instanceof用法小记

作者: bo_bo_bo_la | 来源:发表于2017-12-21 21:54 被阅读17次

    JavaScript中typeof instanceof常用老判断一个变量是否为空,或者是什么类型的。但是他们之间还是有区别的

    1. typeof

    typeof是一个一元运算,放在一个运算数之前,运算数可以是任意类型
    它返回值是一个字符串,该字符串说明运算符的类型
    typeof一般只能返回如下几个结果:“number”,“string”,“boolean”,“object”,“function”,“undefined”.

        <script type="text/javascript">
            var str = "hhhh";
            var num = 12334;
            var obj = {};
            var fn = function(){
                console.log(11111)
            }
            var arr = [];
            var boolea = false;
            var a = null;
            var b;
            //            string       number      object     function     object      boolean     object   undefined
            console.log(typeof str, typeof(num), typeof obj, typeof fn, typeof arr, typeof boolea, typeof a, typeof b)
        </script>
    

    即我们可以通过typeof判断一个变量是否存在。例如

    if(typeof a!="undefined"){alert("ok")}
    

    而不要去使用if(a),因为如果a不存在(为声明)则会报错。对于 Array,Null 等特殊对象使用 typeof 一律返回 object,这正是 typeof 的局限性。

    经常会在js里用到数组,比如 多个名字相同的input, 若是动态生成的, 提交时就需要判断其是否是数组.

    if(document.mylist.length != "undefined" ) {} //这个用法有误.

    正确的是
    if( typeof(document.mylist.length) != "undefined" ) {}

    或 if( !isNaN(document.mylist.length) ) {}

    在JavaScript中,判断一个变量的类型常常会用typeof运算符,在使用该运算符时采用引用类型存储值会出现一个问题,无论引用的是什么类型的对象,他都返回”object“,这时就要用到instanceof

    2. instanceof 检测某个对象是不是另一个对象的实例,即测试一个对象在其原型链中是否存在一个构造函数的prototype属性

    语法: object(要检测是对象) instanceof constructor(某个构造函数)
    如 :var a=new Array();

    alert(a instanceof Array); // true,

    同时 alert(a instanceof Object) //也会返回 true;

    这是因为 Array 是 object 的子类。

    再如:function test(){};

    var a=new test();

    alert(a instanceof test) 会返回true

    另外,更重的一点是 instanceof 可以在继承关系中用来判断一个实例是否属于它的父类型。

    例如:

    function Foo(){}
    Foo.prototype = new Aoo();//JavaScript 原型继承
    var foo = new Foo();
    console.log(foo instanceof Foo)//true
    console.log(foo instanceof Aoo)//true

    上面的代码中是判断了一层继承关系中的父类,在多层继承关系中,instanceof 运算符同样适用。

    相关文章

      网友评论

          本文标题:typeof与instanceof用法小记

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