Html5专题

js 中 typeof和instanceof的区别

2017-10-04  本文已影响27人  lxt410725

学习过js的人大概对typeof都比较了解,但是对instanceof呢,可能感觉比较陌生,我也是,我也是发现了需要对比,不然总是一知半解,所以特地花了一点时间特来总结,如有错误欢迎指正。

1、typeof和instanceof都可以用来判断变量,它们的用法有很大区别:typeof会返回一个变量的基本类型,只有以下几种:number,boolean,string,object,undefined,function;

alert(typeof(10));//number

alert(typeof("a"));//string

alert(typeof(true));//boolean

alert(typeof(n));//undefined

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

var b = '13';

alert(b instanceof String);  //false

alert(typeof b);  //string

var c = new String("123");

alert(c instanceof String);  //true

alert(typeof c);  //object

大家都知道js中可以使用typeof来判断变量的基本类型,但是这个方法不适用于来判断数组,因为不管是数组还是对象,都会返回object,这就需要我们需求其他的方法。

有几种方法可以拿来判断:

1、constructor属性

这个属性在我们使用js系统或者自己创建的对象的时候,会默认的加上,例如:

var arr = [1,2,3];  //创建一个数组对象

arr.prototype.constructor = Array;  //这一句是系统默认加上的

所以我们就可以这样来判断:

var arr = [1,2,3,1];

alert(arr.constructor === Array);   // true

2、instanceof

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

var arr = [1,2,3];

alert(arr instanceof Array);   // true

最后,为了给大家一个结果,现写出一个终极解决方案:

判断数组终极解决方案

var arr = [1,2,3];

function isArrayFn(obj){  //封装一个函数

if (typeof Array.isArray === "function") {

return Array.isArray(obj); //浏览器支持则使用isArray()方法

}else{                     //否则使用toString方法

return Object.prototype.toString.call(obj) === "[object Array]";

}

}

alert(isArrayFn(arr));// true

上一篇 下一篇

猜你喜欢

热点阅读