日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

JS中準確判斷變量類型的方法

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

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

Js基礎變量類型

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

判斷變量的函數

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

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

typeof判斷變量類型

typeof運算符用于判斷對象的類型,但是對于一些創建的對象,它們都會返回object。我們用該函數來判斷上面的結果:

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包括箭頭函數都能正確檢查出來,但是對于reg,date,null都得到了object。看來還需要具體的判斷。

instanceof檢查

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

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

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

使用Object.prototype.toString.call

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

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]

實現getValType函數

根據上面的分析,我們可以先用typeOf函數判斷出基礎類型number,string,function,boolean,undefined。然后如果結果是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

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

總結

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

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

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

以上就是一文看懂在JS中準備判斷變量類型的詳細內容,更多關于JS判斷變量類型的資料請關注好吧啦網其它相關文章!

標簽: JavaScript
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日本 国产 欧美色综合| 国产日韩精品视频一区二区三区| 天海翼精品一区二区三区| 日韩欧美一区二区三区在线观看| 国产欧美日韩亚洲一区二区三区| 99国产精品久久久久久久成人热| 成人午夜亚洲| 国产第一亚洲| 激情欧美一区| 在线观看视频免费一区二区三区| 高潮一区二区| 国产亚洲一区二区手机在线观看 | 欧美激情另类| 精品国产黄a∨片高清在线| 青草国产精品| 国产一区日韩| 欧美/亚洲一区| 欧美一区91| 久久久噜噜噜| 亚洲三级网站| 黄色网一区二区| 免播放器亚洲| 你懂的国产精品| 婷婷丁香综合| 中文字幕日本一区| 日本精品久久| 日韩精品一区二区三区免费观看| 午夜国产精品视频免费体验区| 四虎精品一区二区免费| 精品国产成人| 日本va欧美va瓶| 午夜久久免费观看| 麻豆久久久久久| 另类亚洲自拍| 欧美三级精品| 国产精品高清一区二区| 亚洲一区二区三区四区五区午夜| 久久精品国产99国产| 在线亚洲一区| 日韩精彩视频在线观看| 免费不卡中文字幕在线| 久久久久久亚洲精品美女| 中文字幕免费一区二区| 日韩午夜在线| 欧美日韩尤物久久| 国产精品第一| 国产精品最新自拍| 日韩1区2区3区| 人人爽香蕉精品| 亚洲高清激情| 精品国产欧美日韩| 国产精品二区影院| 国产欧美精品| 水蜜桃久久夜色精品一区| 野花国产精品入口| 欧美中文字幕| 午夜欧美精品| 亚洲二区视频| 欧美日韩黑人| 99久久www免费| 久久国产中文字幕| 免费精品国产的网站免费观看| 久久久影院免费| 99久久精品费精品国产| 欧美日韩中文字幕一区二区三区| 久久久久国产精品一区三寸| 亚洲成av在线| 丝袜av一区| 免费视频久久| 亚洲综合不卡| 亚洲精品乱码日韩| 国产精品蜜月aⅴ在线| 精品三级国产| 国户精品久久久久久久久久久不卡 | 免费精品国产| 国产婷婷精品| 色狠狠一区二区三区| 欧美精品三级在线| 国产一区二区亚洲| 女生影院久久| 女人天堂亚洲aⅴ在线观看| 免费在线观看不卡| 国产精品分类| 黄页网站一区| 国产欧美日韩一区二区三区四区| 成年男女免费视频网站不卡| 99久久婷婷| 国产伦乱精品| 国产一区亚洲| 国产日韩一区二区三区在线播放| 久久永久免费| 蜜桃伊人久久| 麻豆国产欧美一区二区三区| 精品亚洲美女网站| 亚洲欧美久久久| 国产激情久久| 久久aⅴ国产紧身牛仔裤| 国产剧情在线观看一区| 亚洲一区欧美二区| 精品久久久亚洲| 日韩一二三区在线观看| 福利视频一区| 欧美日韩一区二区综合| 美女性感视频久久| 国产精品日韩欧美一区| 另类小说一区二区三区| 亚洲欧美一区在线| 国产精品一区二区精品| 欧美日韩国产高清| 精品一区二区三区亚洲| 免费视频最近日韩| 电影亚洲精品噜噜在线观看 | 日韩在线黄色| 韩日一区二区三区| 国产aⅴ精品一区二区四区| 亚洲精选成人| 自拍日韩欧美| 欧美日韩免费观看一区=区三区| 国产精品啊v在线| 亚洲开心激情| 午夜一级久久| 香蕉久久精品| 国产福利亚洲| 日本色综合中文字幕| 午夜亚洲福利在线老司机| 久久中文视频| 久久蜜桃av| 久久一区二区中文字幕| 日韩中文视频| 日韩网站中文字幕| 日韩欧美一区二区三区在线视频| 国产伊人久久| 国产69精品久久| 岛国av在线网站| 97精品国产| 日韩中文字幕高清在线观看| 91一区二区三区四区| 欧美激情精品| 黄在线观看免费网站ktv| 国产一区2区| 在线一区视频观看| 最新亚洲激情| 午夜电影一区| 欧美日韩一区自拍| 久久不卡国产精品一区二区| 精品三区视频| 激情久久五月| 亚洲美女久久| 欧美激情五月| 香蕉久久精品| 日韩精品三区四区| 国产成人免费精品| 久久影院午夜精品| 久久精品动漫| 视频一区中文字幕国产| 日韩高清国产一区在线| 精品国产aⅴ| 国产精品嫩草99av在线| 国产精品一区二区av日韩在线| 国产中文在线播放| 亚洲久草在线| 日韩高清不卡| 国产精品久久久久久妇女| 精品一区毛片| 国产精品一区二区三区av麻| 久久久成人网| 国产精品qvod| 亚洲高清影视| 国产精品久久久久毛片大屁完整版| 日韩一区二区在线免费| 亚洲永久精品唐人导航网址| 国产一区2区在线观看| 在线看片日韩| 91精品国产乱码久久久久久久| 日本强好片久久久久久aaa| 亚洲福利专区| 亚洲精品**中文毛片| 欧美欧美黄在线二区| 伊人久久大香线蕉av超碰演员| 国产精品www994| 亚洲青青久久| 在线观看免费一区二区| 97精品在线| 国产精品亚洲一区二区在线观看| 国精品一区二区| 日韩免费高清| а√天堂8资源中文在线| 久久激情av| 日韩欧美中文字幕电影| 老司机精品久久| 亚洲激情五月| 91精品高清| 欧美色图一区| 丝袜美腿诱惑一区二区三区| 成人在线视频免费| av中文资源在线资源免费观看| 国产精品99久久久久久董美香| 日韩午夜高潮| 99在线精品免费视频九九视| 欧美日韩中文字幕一区二区三区 |