你但願一個值是字符串、數字、布爾值或undefined,最佳選擇是使用typeof運算符javascript
// 檢測字符串 if (typeof name === "string") { antherName = name.sbustring(3); } // 檢測數字 if (typeof count ==== "number") { updateCount(count); } // 檢測布爾值 if (typeof found === "boolean" && found) { message("Found!"); } // 檢測undefined if (typeof MyApp === "undefined") { MyApp = {}; }
typeof運算符的獨特之處在於,將其用於一個未聲明的變量也不會報錯。未定義的變量和值爲undefined的變量經過typeof都將返回""undefined"java
javascript中除了原始值以外的值都是引用。幾種類置的引用類型:Object、Array、Date和Error。typeof運算符在判斷這些引用類型時則顯得力不從心。由於全部對象都會返回Object。typeof運算符用於null時也會返回object正則表達式
// 檢測日期 if (value instanceof Date) { console.log(value.getFullYear()); } // 檢測正則表達式 if (value instanceof RegExp) { if (value.test(antherValue)) { console.log("Matched"); } } // 檢測Error if (value instanceof Error) { throw value; } // 檢測自定義對象(惟一的方法) if (me instanceof Person) { } // 全部對象都被認爲是Object的實例 if (me instanceof Object) { }
function myFunc(){} console.log(typeof myFunc === "function");
// 採用鴨式辨型的方法 function isArray(value) { return typeof value.sort === "function"; } // 優雅的解決方案 function isArray(value) { return Object.prototype.toString.call(value) === "[Object Array]"; } function isArray(value) { if (typeof Array.isArray === "function") { return Array.isArray(value); } return Object.prototype.toString.call(value) === "[Object Array]"; }
var object = { count: 0, related: null }; if ("count" in object) { } if ("related" in object) { } // IE8以及小於IE8版本中,DOM對象並不是繼承自Object,所以不包含hasOwnProperty方法 // 若是對象是DOM時須要判斷 if ("hasOwnProperty" in Object && Object.hasOwnProperty("related")) { }