亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術(shù)文章
文章詳情頁

JS中準(zhǔn)確判斷變量類型的方法

瀏覽:53日期:2024-05-05 17:35:34

這是一個高頻面試題,我們開發(fā)中也進(jìn)程會遇到,今天我們來實現(xiàn)一個函數(shù)getValType(val)用來獲取一個變量的類型。從1. JS基礎(chǔ)變量類型。2. Js中判斷變量的函數(shù)。 3. 實現(xiàn)getValType函數(shù)。3個方面來分析實現(xiàn)。

Js基礎(chǔ)變量類型

在 JS 中,有 5 種基本數(shù)據(jù)類型和 1 種復(fù)雜數(shù)據(jù)類型,基本數(shù)據(jù)類型有:Undefined, Null, Boolean, Number和String;復(fù)雜數(shù)據(jù)類型是Object,Object中還細(xì)分了很多具體的類型,比如:Array, Function, Date等等。

判斷變量的函數(shù)

我們先定義一組變量來用下面的函數(shù)來測試:

var allVarMap = { // 數(shù)字 num:123, // Infinity num1: 1 / 0, // NaN num2: null / 0, // 字符串 str: ’abcdef’, // 布爾類型 bool: true, // 數(shù)組 arr :[1, 2, 3, 4], // json對象 json :{name:’wenzi’, age:25}, // 函數(shù) func:function(){ console.log(’this is function’); }, // 箭頭函數(shù) func1: () => {console.log(’arrow function’)}, // undefined類型 und:undefined, // null類型 nul:null, // date類型 date:new Date(), // 正則表達(dá)式 reg :/^[a-zA-Z]{5,20}$/, // 異常類型 error:new Error()}

typeof判斷變量類型

typeof運(yùn)算符用于判斷對象的類型,但是對于一些創(chuàng)建的對象,它們都會返回object。我們用該函數(shù)來判斷上面的結(jié)果:

var results = []for (let i in allVarMap) {results.push(typeof allVarMap[i])}console.log(results.join())// number,number,number,string,boolean,object,object,function,function,undefined,object,object,object,object

可以看到,NaN和Infinity都檢查為number類型,其他的 string,function,boolean,undefined包括箭頭函數(shù)都能正確檢查出來,但是對于reg,date,null都得到了object??磥磉€需要具體的判斷。

instanceof檢查

ECMAScript 引入了另一個 Java 運(yùn)算符 instanceof 來解決這個問題。instanceof 運(yùn)算符與typeof 運(yùn)算符相似,用于識別正在處理的對象的類型。instanceof運(yùn)算符用來判斷一個構(gòu)造函數(shù)的prototype屬性所指向的對象是否存在另外一個要檢測對象的原型鏈上。與 typeof 方法不同的是,instanceof方法要求開發(fā)者明確地確認(rèn)對象為某特定類型。

console.log(allVarMap.date instanceof Date) // trueconsole.log(allVarMap.func instanceof Function) // true

可以看到instanceof可以正確判斷出date,func的類型,但是前提是已知該變量的類型,所以這里不符合我們的預(yù)期。

使用Object.prototype.toString.call

定義:首先,取得對象的一個內(nèi)部屬性[[Class]],然后依據(jù)這個屬性,返回一個類似于”[object Array]“的字符串作為結(jié)果(看過ECMA標(biāo)準(zhǔn)的應(yīng)該都知道,[[]]用來表示語言內(nèi)部用到的、外部不可直接訪問的屬性,稱為“內(nèi)部屬性”)。利用這個方法,再配合call,我們可以取得任何對象的內(nèi)部屬性[[Class]],然后把類型檢測轉(zhuǎn)化為字符串比較,以達(dá)到我們的目的。我們看看下面的函數(shù)運(yùn)行結(jié)果:

var results = []for (let i in allVarMap) {results.push(Object.prototype.toString.call(allVarMap[i]))}console.log(results.join())// [object Number],[object Number],[object Number],[object String],[object Boolean],[object Array],[object Object],[object Function],[object Function],[object Undefined],[object Null],[object Date],[object RegExp],[object Error]

實現(xiàn)getValType函數(shù)

根據(jù)上面的分析,我們可以先用typeOf函數(shù)判斷出基礎(chǔ)類型number,string,function,boolean,undefined。然后如果結(jié)果是object,我們再用Object.prototype.toString.call來判斷出具體的類型。

var getVarType = function (val = 0) {var type = typeof val// object需要使用Object.prototype.toString.call判斷if (type === ’object’) {var typeStr = Object.prototype.toString.call(val)// 解析[object String]typeStr = typeStr.split(’ ’)[1]type = typeStr.substring(0, typeStr.length - 1)}return type}var results = []for (let i in allVarMap) {results.push(getVarType(allVarMap[i]))}console.log(results.join())// number,number,number,string,boolean,Array,Object,function,function,number,Null,Date,RegExp,Error

可以看到,完美判斷出了所有變量的類型,該函數(shù)可以再添加一些邏輯,判斷一個變量是否是NaN,Infinity之類的特殊需求。

總結(jié)

1 typeOf能判斷出一個變量的類型,但是只能判斷出number,string,function,boolean,undefined,null和其他對象類型返回結(jié)果都為object.

2 instanceof能判斷出一個對象是否是另一個類的實例。

3 Object.prototype.toString.call能判斷出所有變量的類型,返回值為[Object ***]。

以上就是一文看懂在JS中準(zhǔn)備判斷變量類型的詳細(xì)內(nèi)容,更多關(guān)于JS判斷變量類型的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: JavaScript
相關(guān)文章:
主站蜘蛛池模板: 久久国产精品久久久 | 久久久精品2021免费观看 | 国模私拍福利视频在线透漏 | 欧美成人tv在线观看免费 | 久久久久琪琪免费影院 | 久久久久99| 国产精品一区二区手机看片 | 一级毛片一级毛片a毛片欧美 | 黄色一级片美国 | 国产视频久久久久 | 国产福利精品一区二区 | 成人偷拍自拍 | 亚洲伦理久久 | 一级黄色毛片子 | 久久99精品久久久久久野外 | 成人看片黄a在线观看 | 你懂的网址免费国产 | 亚洲经典一区二区三区 | 国产剧情91| 亚洲精品97福利在线 | 亚洲综合区小说区激情区噜噜 | 高清国产美女一级a毛片在线 | 亚洲一区有码 | 黑人巨茎xxx免费视频 | 香蕉视频91 | 91丨国产| 欧美刺激午夜性久久久久久久 | 涩涩色中文综合亚洲 | 日韩在线一区高清在线 | 992tv国产精品福利在线 | 国产日韩欧美精品一区二区三区 | 国内真实愉拍系列情侣自拍 | 国产成人免费片在线观看 | 91在线丨亚洲 | 中国精品一级毛片免费播放 | 国产一区二区三区四区在线污 | 女人洗澡一级毛片一级毛片 | 黄色字幕网| 亚洲国产毛片aaaaa无费看 | 免费观看又色又爽又大高清网站 | a级毛片免费在线观看 |