JS中 typeof 与 instanceof 的区别

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

typeof(1): number
typeof(NaN): number
typeof(Number.MIN_VALUE): number
typeof(Infinity): number
typeof("123"): string
typeof(true): boolean
typeof(window): object
typeof(Array()): object
typeof(function(){}): function
typeof(document): object
typeof(null): object
typeof(eval): function
typeof(Date): function
typeof(sss): undefined
typeof(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 ) // ture
document.write(b instanceof Number ) // false 直接赋值的 Number 变量 false * (如果是用new申明的结果为 true ,下同)
document.write(c instanceof String) // false 直接赋值的 string 变量 false *
document.write(d instanceof Array) // true 直接赋值的 Array 变量 true
document.write(e instanceof Object) // true 直接赋值的 Object 变量 true
document.write(f instanceof Function) // true 直接赋值的 Function 变量 true
document.write(g instanceof Boolean) // false 直接赋值的 Boolean 变量 false * 
</script>

 

用法一:

<script>
var a=new Array();
document.write(a instanceof Array); // true
document.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');
else
alert('N') // 输出 Y 说明 window 也是一个对象的一个实例
alert(typeof(window)) // 输出 object
</script>

 

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

posted on 2014-10-01 23:19  bigdesign  阅读(216)  评论(0编辑  收藏  举报