js中typeof和instanceof的区别

来源:互联网 发布:php读取json内容 编辑:程序博客网 时间:2024/06/01 07:37

typeof和instanceof都可以用来判断变量,它们的用法有很大区别:

1.typeof()会返回一个变量的基本类型,只又一下几种:
number,boolean,string,object,undefined,function;

typeof("abc");//"string"typeof(10);//"number"typeof(false);//"boolean"typeof({});//"object"typeof(a);;//"object"typeof(function a(){});//"function"

2.instanceof返回的是一个布尔值:

var a=[];a instanceof Array;//true

注意:
instanceof只能用来判断对象和函数,不能用来判断字符串和数字等

var b="123";b instanceof String;//false//这里的b是一个字符串,但是也会返回false

在这里instanceof还有一个重要的用法,那就是可以用来判断数组
因为typeof()这个方法不适用于来判断数组,因为不管是数组还是对象,都会返回object

typeof([]);//"object"typeof({});//"object"

方法一:constructor属性(constructor:构造函数;构造器;建造者)
当我们使用js的时候系统会默认加上一个constructor,constructor 属性返回对创建此对象的数组函数的引用。

var arr = [1,2,3];  //创建一个数组对象arr.prototype.constructor = Array;  //这一句是系统默认加上的arr.constructor==Array;//true

方法二:instanceof
instanceof是检测对象的原型链是否指向构造函数的prototype对象的,所以我们也可以用它来判断:

[] instanceof Array;//true

判断一个元素是不是数组:

        //判断数组的方法一:        var arr = [1,2,3];        function isArray(obj){            //判断obj类型是否为object            if(typeof(obj)=="object"){                //如果obj.constructor为Ayyay则为数组,否则为对象                if(obj.constructor==Array){                    console.log(obj+"是一个数组");                }else{                    console.log(obj+"是一个对象");                }            }        };        isArray(arr);
        //判断数组的方法二:        var arr1 = [4,5,6];        function isArray1(obj){            if(obj instanceof Array){                console.log(obj+"是一个数组");            }else{                console.log(obj+"不是一个数组");            }        }        isArray1(arr1);
0 0