文章首發: http://www.cnblogs.com/sprying/p/4349426.htmljavascript
本文羅列了通常Js類型檢測的方法,是構建Js知識體系的一小塊,這篇文章是我很早以前總結的。html
var obtainType = function(o){ var t; if(o === null ) return 「null」; else if(o !== o) return 「NaN」; else if( (t = typeof o) !== ‘object’) return t; }
function obtainType(type) { return function (obj) { return Object.prototype.toString.call(obj) === "[object " + type + "]" } } var isObject = isType("Object") var isString = isType("String") var isArray = Array.isArray || isType("Array") var isFunction = isType("Function")
/** * 返回函數的名字,可能爲空串;不是函數,返回null */ Function.prototype.getName = function () { if ("name" in this) return this.name; return this.name = this.toString().match(/function\s*([^(]*)\(/)[1]; };
/** * 返回:null NaN undefined string number boolean * function Array String Object(包括一些自定義類型) 自定義類型 */ var obtainType =function(o){ /** * 獲取參數類型 * 對象直接量、Object.create、自定義構造函數的類屬性皆爲Object; * 識別出原生類型 (內置構造函數和宿主對象) */ function classOf(obj){ return Object.prototype.toString.call(obj).slice(8, -1); } /** * 返回函數的名字,可能爲空串;不是函數,返回null */ Function.prototype.getName = function () { if ("name" in this) return this.name; return this.name = this.toString().match(/function\s*([^(]*)\(/)[1]; }; var t, c, n; // 處理null值特殊情形 if (o === null) return "null"; // NaN:和自身值不相等 if (o !== o) return "NaN"; // 識別出原生值類型和函數、undefined if ((t = typeof o) !== "object") return t; // 識別出原生類型 if ((c = classOf(o)) !== "Object") return c; // 返回自定義類型構造函數名字 if (o.constructor && typeof o.constructor === "function" && (n = o.constructor.getName())) return n; return "Object"; };
5.java
var strObj = new String('abc'); typeof strObj // "object" obtainType(strObj) // "String"
// bad if (name !== '') { // ...stuff... } // good if (name) { // ...stuff... } // bad if (collection.length > 0) { // ...stuff... } // good if (collection.length) { // ...stuff... }