typeof 运算符把类型信息当作字符串返回,包括有大家常有变量类型: "number", "string" ,"boolean", "undefined","function","nan" 以及"object"。
PS:在使用typeof()操作符时圆括号是可选项,可带可不带。即两种形式 typeof(XX) 或 typeof XX
1.我们可以使用typeof来判断一个变量是否存在,如判断变量a是否存在,我们可以使用if(typeof(a)!="undefined"){},而不要去使用if(a){}。因为如果a不存在(未声明)则会出错。
常见的操作实例还有:
//Number 数字
typeof(37) === 'number';
typeof 3.14 === 'number';
typeof Number(1) === 'number'; // 但不要使用这种形式!!!
// String 字符串
typeof ("") === 'string';
typeof "bla" === 'string';
typeof String("abc") === 'string'; // 但不要使用这种形式!!!
// Boolean 布尔值
Typeof (true) === 'boolean';
typeof false === 'boolean';
typeof Boolean(true) === 'boolean'; // 但不要使用这种形式!!!
// Undefined 未定义
typeof undefined === 'undefined';
Typeof(未定义的变量/对象) === 'undefined';
//function 函数
typeof function(){} === 'function';
typeof Math.sin === 'function'; //返回数的正弦。
//NaN (Not-A-Number的缩写) 不是一个数字
typeof 1/0 === 'NaN';
// Object 对象
typeof null === 'object';
typeof (new Date()) === 'object';
// 下面的容易令人迷惑,不要使用!!!
typeof new Boolean(true) === 'object';
typeof new Number(1) ==== 'object';
typeof new String("abc") === 'object';
2.局限性:对于Array,Null等特殊对象使用typeof 一律返回object,这正是typeof的局限性。如果我们希望获取一个对象是否是数组,或判断某个变量是否是某个对象的实例则要选择使用instanceof。instanceof用于判断一个变量是否是某个对象的实例。
①如:数组
var arr=new Array();
alert(arr instanceof Array); //true
alert(arr instanceof Object) //true
都返回true,这是因为Array是object的子类。
②再如:实例
function test(){};
var te=new test();
alert(te instanceof test) //true。
返回true并不是因为 Array是Object的子对象,而是因为 Array的prototype属性构造于Object,Array的父级是Function)