1. typeof
鉴于 ECMAScript 是松散类型的,因此需要有种手段来检测给定变量的数据类型,typeof 就是负责提供这方面信息的操作符。对一个值使用 typeof 操作符可能返回下列某个字符串:
( 缺点:对于数组和对象或null 都会返回object)
"undefined" ——如果这个值未定义;
"boolean" ——如果这个值是布尔值;
"string" ——如果这个值是字符串;
"number" ——如果这个值是数值;
"object" ——如果这个值是对象或 null;
"function" ——如果这个值是函数。
例如:
var message = "some string";
alert(typeof message); //"string"
alert(typeof(message)); //"string"
alert(typeof 95); //"number"
var y=true;
alert(typeof y); //"boolean"
var a = function() { };
alert(typeof a); //"function"
var b = [1,2,3];
alert(typeof b); //"object"
var c = { };
alert(typeof c); //"object"
var d = null;
alert(typeof d); //"object"
2. 类型判断
类型判断,一般就是判断是否是数组,是否是空对象。
(1) 判断是否是数组
定义一个数组:var a = [1,2,3,4,5];
方法一:
toString.call(a); // "[object Array]"
方法二:
a instanceof Array; //true
方法三:
a.constructor == Array; //true
第一种方法比较通用,也就是Object.prototype.toString.call(a)的简写。
instanceof和constructor判断的变量,必须在当前页面声明的,比如,一个页面(父页面)有一个框架,框架中引用了一个页面(子页面),在子页面中声明了一个a,并将其赋值给父页面的一个变量,这时判断该变量,Array == object.constructor会返回false;
(2)判断是否是空对象
定义一个变量:var obj = {};
方法一:
JSON.stringify(obj); // "{}"通过转换成JSON对象来判断是否是空大括号
方法二:
if(obj.id){ //如果属性id存在....}这个方法比较土,大多数人都能想到,前提是得知道对象中有某个属性。
方法三:
function isEmptyObject(e) {
var t; for (t in e) return !1; return !0 } //true isEmptyObject(obj);
//false isEmptyObject({ "a":1, "b":2});
这个方法是jQuery的isEmptyObject()方法的实现方式。