typeof与instanceof用法小记

2017-12-21  本文已影响17人  bo_bo_bo_la

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 运算符同样适用。

上一篇下一篇

猜你喜欢

热点阅读