无意间想到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>