首页 > 代码库 > JS中 typeof 与 instanceof 的区别

JS中 typeof 与 instanceof 的区别

JavaScript 中 typeof 和 instanceof 常用来判断一个变量是否为空,或者是什么类型的。但它们之间还是有区别的:
typeof
是一个一元运算,放在一个运算数之前,运算数可以是任意类型。
它返回值是一个字符串,该字符串说明运算数的类型。
typeof 一般只能返回如下几个结果:number,boolean,string,function,object,undefined。(Array,Null 均返回 object ,无法判断这些类型)
例子:

typeof(1): numbertypeof(NaN): numbertypeof(Number.MIN_VALUE): numbertypeof(Infinity): numbertypeof("123"): stringtypeof(true): booleantypeof(window): objecttypeof(Array()): objecttypeof(function(){}): functiontypeof(document): objecttypeof(null): objecttypeof(eval): functiontypeof(Date): functiontypeof(sss): undefinedtypeof(undefined): undefined

 

我们可以使用 typeof 来获取一个变量是否存在,如 if(typeof a!="undefined"){ alert("ok") },而不要去使用 if(a) 因为如果 a 不存在(未声明)则会出错,
对于 Array,Null 等特殊对象使用 typeof 一律返回 object,这正是 typeof 的局限性。
如果我们希望获取一个对象是否是数组,或判断某个变量是否是某个对象的实例则要选择使用instanceof。

instanceof 用于判断一个对象是否是某个类或者它的子类的一个实例,instanceof通过返回一个布尔值来指出。
如果判断对象是直接赋值的string number undefined类型变量 ,可能无法输出结果。

<script>var a = new Number(9);var b = 9;var c = ‘hello‘var d = [‘hello‘,‘hi‘]var e = {‘name‘:‘joyo‘,‘age‘:18};var f = function(){};var g = 0;var h = ‘‘; // 当值为空或者 undefined 时 ,用 instanceof 无法判断 ,可以用 typeof document.write(a instanceof Number ) // turedocument.write(b instanceof Number ) // false 直接赋值的 Number 变量 false * (如果是用new申明的结果为 true ,下同)document.write(c instanceof String) // false 直接赋值的 string 变量 false *document.write(d instanceof Array) // true 直接赋值的 Array 变量 truedocument.write(e instanceof Object) // true 直接赋值的 Object 变量 truedocument.write(f instanceof Function) // true 直接赋值的 Function 变量 truedocument.write(g instanceof Boolean) // false 直接赋值的 Boolean 变量 false * </script>

 

用法一:

<script>var a=new Array();document.write(a instanceof Array); // truedocument.write(a instanceof Object); // true Array是object的子类。</script>

 

用法二:
再如:

<script>function test(){}; var a = new test();document.write(a instanceof test) // true</script>

 

用法三:

<script>if(window instanceof Object)alert(‘Y‘);elsealert(‘N‘) // 输出 Y 说明 window 也是一个对象的一个实例alert(typeof(window)) // 输出 object</script>

 

谈到instanceof我们要多插入一个问题,就是function的arguments,我们大家也许都认为arguments是一个Array,但如果使用instaceof去测试会发现arguments不是一个Array对象,尽管看起来很像。(这个待验证)

JS中 typeof 与 instanceof 的区别