當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
JavaScript中类型检测
生活随笔
收集整理的這篇文章主要介紹了
JavaScript中类型检测
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章首發:?http://www.cnblogs.com/sprying/p/4349426.html
本文羅列了一般Js類型檢測的方法,是構建Js知識體系的一小塊,這篇文章是我很早之前總結的。
一、Js中有5種基本數據類型
Undefined 、Null、Boolean、String、Number(包含NaN) NaN和任何類型的值都不相等,包括NaN;isNaN用來判斷數值是不是NaN類型??二、類型判斷
1. isFinite(number) 是不是無窮大。如果是NaN,或者正負無窮大,或者非數字類型,則返回false。??
2. typeof運算符 使用的時候,空格或者typeof(param) 返回的值 string number boolean undefined function object null也返回object 根據以上,判斷類型可以如下: 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; } 可以識別出null、NaN string number boolean undefined function。 上面最后只剩下object,比如數組的識別,自定義類型的識別 3. 數組等原生類型的識別,可以采用如下 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")?
4. 自定義類型判斷 /*** 返回函數的名字,可能為空串;不是函數,返回null*/ Function.prototype.getName = function () {if ("name" in this) return this.name;return this.name = this.toString().match(/function\s*([^(]*)\(/)[1]; };?
原生類型和自定義類型的object都可以判斷了,于是 /*** 返回: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";// 識別出原生值類型和函數、undefinedif ((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.
var strObj = new String('abc');typeof strObj // "object"obtainType(strObj) // "String"?
三、?其它
1. Dom元素判斷 if(dom.nodeType){...Dom...} if(dom.createElement) 2. jQuery等類型判斷 $('#aa') instanceof jQuery//不支持跨多窗口和框架子頁面 3. if(a) a為null undefined 0 ""?NaN時自動轉換成false 一般推薦的寫法 // bad if (name !== '') {// ...stuff... }// good if (name) {// ...stuff... }// bad if (collection.length > 0) {// ...stuff... }// good if (collection.length) {// ...stuff... }轉載于:https://www.cnblogs.com/sprying/p/4349426.html
總結
以上是生活随笔為你收集整理的JavaScript中类型检测的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: TS流解析 三
- 下一篇: Android 数据存储与IO (一)