摘要:日常工作中經常會有判斷數據類型的需求,這里簡單介紹下我平時判斷數據類型的幾種方式。當使用檢測基本類型時,會始終返回操作符確實解決了類型判斷的問題,但還是有一些不足之處。此外,只能返回,并不能直接返回數據的類型。
1. typeof操作符JavaScript中有5種基本數據類型:undefined,String,Boolean,Number,Null,以及一種復雜數據類型Object。日常工作中經常會有判斷數據類型的需求,這里簡單介紹下我平時判斷數據類型的幾種方式。
語法
typeof variable
對一個值使用typeof會返回如下字符串
"undefined" 這個值未定義
"string" 這個值是字符串
"object" 這個值是對象或者null
"function" 這個值是函數
"number" 這個值是數值
"boolean" 這個值是布爾值
example:
var a; console.log(typeof a) // "undefined" var b = 123; console.log(typeof b) // "number"
2. instanceof操作符typeof是一個操作符,并不是作為全局對象的一個方法存在的,所以盡管可以像typeof(123)這樣調用,但圓括號并不是必須的。
當我們檢測的數據類型是基本類型的時候,typeof能很好的滿足我們的需求,但在檢測引用類型的時候就顯得有些力不從心了,通常我們并不是想知道某個值是對象,而是想知道它是什么類型的對象。因此,JavaScript提供了instanceof操作符。
語法
result = variable instanceof constructor
如果這個值是給定引用類型的實例,那么instanceof操作符就會返回true,否則會返回false。
example:
var obj = {}; console.log(obj instanceof Object); //true console.log(obj instanceof RegExp); //false
當使用instanceof檢測基本類型時,會始終返回false
3. Object.prototype.toString.call(data)instanceof操作符確實解決了類型判斷的問題,但還是有一些不足之處。由于instanceof是根據數值原型鏈來識別數據類型的,但是JS中所有引用類型都是Object的實例,因此在檢測一個引用類型的值與Object時,會始終返回true。此外,instanceof只能返回true/false,并不能直接返回數據的類型。因此,這里給大家介紹一種更直觀的檢測方式。
調用Object.prototypeto.String.call(data)會返回一個字符串,如
Object.prototype.toString.call(123) // "[object Number]" Object.prototype.toString.call("123") // "[object String]" Object.prototype.toString.call([123]) // "[object Array]" Object.prototype.toString.call(/123/) // "[object RegExp]"
是不是很直觀呢,為了方便使用,還可以做一些簡單的處理,進一步的封裝為一個函數,來供我們在開發中使用。
function checkType(data) { return {}.toString.call(data).match(/[A-Z]w+/)[0] }; console.log(checkType(123)) // "Number" console.log(checkType([123])) // "Array" console.log(checkType(/123/)) // "RegExp" console.log(checkType(null)) // "Null"4.小結
關于我在js中判斷數據類型的方式,就到這里了。如果有什么其它的建議,歡迎指點,讓大家互相交流,互相學習,一起進步!最后,祝大家節日快樂!
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/88818.html
摘要:本文將講解我目前所知道的判斷數據類型的方法。數據類型一共有種除了之外的種屬于原始數據類型。等價于問題四的返回值是什么答案。 本文將講解我目前所知道的判斷JavaScript數據類型的方法。JavaScript數據類型一共有7種: Undefined Null Boolean String Symbol Number Object 除了Object之外的6種屬于原始數據類型。有時,我...
摘要:除和外,所有的數據類型都是可以轉化為對象,而如果是對象,就肯定有構造函數。特性因為和沒有構造函數,因此不能用此方法來判斷。由于同一條原型繼承鏈上的各個對象的構造函數都不一樣,因此,此方法可以區分開繼承鏈上的各個自定義數據類型。 typeof 用法示例 var arr = []; typeof arr; //object typeof(arr); //object typeo...
摘要:對象類型常見的有,,,正則新增自己提供的樂行判斷如果不對對象做嚴格區分使用。的實現使用了原型繼承的表示左表達式,表示右表達式,它是用是否等于來判斷對象的類型的。常見框架和庫的實數據類型判斷測試這里將的實現原理抽取出來,用原生實現。 JavaScript一共有六種數據類型,分為原始類型(又名基本類型)和對象類型(又名引用類型) 原始類型有五種,分別為number,string,boole...
摘要:注意基本變量類型不是對象類型,只有基本包裝類型才是對象類型。至于顯示的原型,在里用屬性表示,這個是原型繼承的基礎知識,在這里就不在敘述了。 前言 如果你要開發一個復雜的產品,那么肯定少不了使用面向對象機制,當然也避不開 Javascript 里面的繼承,instanceof 運算符是原生 Javascript 語言中用來判斷實例繼承的操作符。所以我們有必要深入理解該運算符! inst...
摘要:比如我們今天要討論的,在當中如何判斷一個數組是數組。在數組的原型鏈上也能找到構造函數由上面的幾行代碼可以看出,使用運算符可以分辨數組和對象,可以判斷數組是數組。用判斷實例化的數組擁有一個屬性,這個屬性指向生成這個數組的方法。 如果你沒有注意過這個問題,那么這個標題應該會讓你感到困惑,判斷數據類型這么基礎的問題能有什么坑呢? 少年,你不能太天真了,我們朝夕面對的這門語言,可是JavaSc...
閱讀 1580·2021-09-26 09:46
閱讀 2665·2021-09-07 09:59
閱讀 2750·2021-09-07 09:59
閱讀 1856·2019-08-30 14:20
閱讀 922·2019-08-26 13:39
閱讀 3174·2019-08-26 12:24
閱讀 771·2019-08-26 11:55
閱讀 1212·2019-08-23 16:49