ECMAScript 是松散类型的,因此需要一种手段来检测给定变量的数据类型,typeof 操作符常用于基本数据类型检测,instanceof 操作符常用于引用类型数据检测。
一、typeof
ECMAScript 是松散类型的,一次需要一种手段来检测给定变量的数据类型,typeof 操作符就是负责提供这方面信息的,typeof 可以用于检测基本数据类型和引用数据类型。
- 概念:操作符
- 目的:检测一个变量是不是基本数据类型的变量,换句话说,判断一个变量是字符串,数值, 布尔值,对象,undefined
- 注意:使用 typeof 操作符的时候,如果检测对象是函数,那么操作符返回 “function” ,如果检测对象是正则表达式,在 Safari 和 Chrome 中使用 typeof 的时候会错误的返回 “function”,其他的浏览器返回的是object
var a="英莱特_何某";
var b=true;
var c=10;
var d;
var e=null; //null也是一个对象
var f=new Object();
alert(typeof a); //string
alert(typeof b); //number
alert(typeof c); //boolean
alert(typeof d); //undefined
alert(typeof e); //object
alert(typeof f); //object
typeof 主要用于检测基本数据类型:数值、字符串、布尔值、undefined, 因为 typeof 用于检测引用类型值时,对于任何 Object 对象实例(包括 null ),typeof 都返回 “object” 值,没办法区分是那种对象,对实际编码用处不大。
二,instanceof
在检测基本数据类型时 typeof 是非常得力的助手,但在检测引用类型的值时,这个操作符的用处不大,通常,我们并不是想知道某个值是对象,而是想知道它是什么类型的对象。此时我们可以使用 ECMAScript 提供的 instanceof 操作符。
- 概念:检验引用类型
- 目的:判断对象是 Array, RegExp
- 注意:object 是所有对象的基类
var array=new Array();
var object=new Object();
var regexp=new RegExp();
function Func(){};
var func1=new Func();
alert(array instanceof Array); //true
alert(object instanceof Object); //true
alert(regexp instanceof RegExp); //true
alert(func1 instanceof Func); //true
根据规定,所有引用类型的值都是 Object 的实例。因此,在检测一个引用类型值和 Object 构造函数时,instanceof 操作符会始终返回 true。如果使用 instanceof 操作符检测基本类型值时,该操作符会始终返回 false,因为基本类型不是对象。