【摘】【編寫可維護的JavaScript】判斷javascript中的類型

判斷javascript中的類型--編寫維護的JavaScript

檢測原始值

你但願一個值是字符串、數字、布爾值或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")) {

}
相關文章
相關標籤/搜索