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()方法的實現方式。