typeof VS instanceof

74 阅读1分钟

无意间想到js使用中的一个函数typeof用法, typeof 运算符把类型信息当作字符串返回,包括有大家常有变量类型。

typeof 运算符把类型信息当作字符串返回。typeof 返回值有六种可能: "number," "string," "boolean," "object," "function," 和 "undefined."我们可以使用typeof来获取一个变量是否存在,如if(typeof a!="undefined"){},而不要去使用if(a)因为如果a不存在(未声明)则会出错,对于Array,Null等特殊对象使用typeof一律返回object,这正是typeof的局限性。

typeof的运算数未定义,返回的就是 “undefined”.

运算数为数字 typeof(x) = “number”

字符串 typeof(x) = “string”

布尔值 typeof(x) = “boolean”

对象,数组和null typeof(x) = “object”

函数 typeof(x) = “function”

typeof 运算符返回一个用来表示表达式的数据类型的字符串。

对于Array,Null等特殊对象使用typeof一律返回object,这正是typeof的局限性。

如果我们希望获取一个对象是否是数组,或判断某个变量是否是某个对象的实例则要选择使用instanceof。 instanceof用于判断一个变量是否某个对象的实例,如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。

友情提示

a instanceof Object 得到true并不是因为 Array是Object的子对象,而是因为 Array的prototype属性构造于Object,Array的父级是Function;

在IE&Firefox中,对正则表达式用typeof会返回object;在其他浏览器中,则会返回function

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>typeof&instancef</title>
		<link rel="stylesheet" type="text/css" href="">
		<script type="text/javascript">
				var num = 1;
				console.log("num的类型是:"+ typeof num);
				var boo = true;
				console.log("boo的类型是:"+ typeof boo);
				var str = "haha";
				console.log("str的类型是:"+ typeof str);
				var f1 = new Function();
				console.log("f1的类型是:"+ typeof f1);	

				var arr =[];
				var b;
				console.log("arr的类型是:"+ typeof arr);
				console.log("a的类型是:"+ typeof null);
				console.log("b的类型是:"+ typeof b);
				
				console.log(arr instanceof Array );
				console.log(arr instanceof Object);

 		</script>
	</head>
	<body>
		
	</body>
</html>

结果