JS中的变量是松散类型(即弱类型)的,可以用来保存任何类型的数据。
typeof 可以用来检测给定变量的数据类型,可能的返回值:
1. ‘undefined’ --- 这个值未定义;
2. 'boolean' --- 这个值是布尔值;
3. 'string' --- 这个值是字符串;
4. 'number' --- 这个值是数值;
5. 'object' --- 这个值是对象或null;
6. 'function' --- 这个值是函数。
1.检查一个变量是否存在,是否有值.
typeof在两种情况下会返回"undefined":一个变量没有被声明的时候,和一个变量的值是undefined的时候.例如:
var a;
var b = undefined;
alert(typeof(a)); //undefined
alert(typeof(b)); //undefined
还有其他办法检测某个值是否是undefined:
alert(a === undefined);//true
alert(b === undefined);//true
2.判断一个值不等于undefined也不等于null
问题:如果你想检测一个值是否被定义过(值不是undefined也不是null),那么你就遇到了typeof的一个怪异表现:
alert(typeof(null)); //object
3.原始值的类型是什么?
typeof是最好的用来查看某个原始值的类型的方式.
alert(typeof("123")); //string
alert(typeof(123)); //number
alert(typeof(true)); //boolean
5.某个值是否是函数
typeof可以用来检测一个值是否是函数.
alert(typeof(function (){}));
原则上说,instanceof Function也可以进行这种需求的检测.但是,浏览器有一个怪癖:每一个框架和窗口都有它自己的全局变量.因此,如果你将某个框架中的对象传到另一个框架中,instanceof就不能正常工作了,因为这两个框架有着不同的构造函数.这就是为什么ECMAScript5中会有Array.isArray()方法的原因.