电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

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

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

瀏覽:80日期: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
相關文章:
主站蜘蛛池模板: 知企服务-企业综合服务(ZiKeys.com)-品优低价、种类齐全、过程管理透明、速度快捷高效、放心服务,知企专家! | 食品无尘净化车间,食品罐装净化车间,净化车间配套风淋室-青岛旭恒洁净技术有限公司 | 污水/卧式/潜水/钻井/矿用/大型/小型/泥浆泵,价格,参数,型号,厂家 - 安平县鼎千泵业制造厂 | 苏州西朗门业-欧盟CE|莱茵UL双认证的快速卷帘门品牌厂家 | 汽车整车综合环境舱_军标砂尘_盐雾试验室试验箱-无锡苏南试验设备有限公司 | 上海办公室装修,写字楼装修—启鸣装饰设计工程有限公司 | 中开泵,中开泵厂家,双吸中开泵-山东博二泵业有限公司 | 蓄电池回收,ups电池后备电源回收,铅酸蓄电池回收,机房电源回收-广州益夫铅酸电池回收公司 | 天津暖气片厂家_钢制散热器_天津铜铝复合暖气片_维尼罗散热器 | 不锈钢钢格栅板_热浸锌钢格板_镀锌钢格栅板_钢格栅盖板-格美瑞 | 污水/卧式/潜水/钻井/矿用/大型/小型/泥浆泵,价格,参数,型号,厂家 - 安平县鼎千泵业制造厂 | 沈阳缠绕包装机厂家直销-沈阳海鹞托盘缠绕包装机价格 | 嘉兴恒升声级计-湖南衡仪声级计-杭州爱华多功能声级计-上海邦沃仪器设备有限公司 | 鹤壁创新仪器公司-全自动量热仪,定硫仪,煤炭测硫仪,灰熔点测定仪,快速自动测氢仪,工业分析仪,煤质化验仪器 | 匀胶机旋涂仪-声扫显微镜-工业水浸超声-安赛斯(北京)科技有限公司 | 哈尔滨治「失眠/抑郁/焦虑症/精神心理」专科医院排行榜-京科脑康免费咨询 一对一诊疗 | 噪声治理公司-噪音治理专业隔音降噪公司 | J.S.Bach 圣巴赫_高端背景音乐系统_官网 | 选宝石船-陆地水上开采「精选」色选机械设备-青州冠诚重工机械有限公司 | 长沙广告公司|长沙广告制作设计|长沙led灯箱招牌制作找望城湖南锦蓝广告装饰工程有限公司 | 福州时代广告制作装饰有限公司-福州广告公司广告牌制作,福州展厅文化墙广告设计, | 对辊式破碎机-对辊制砂机-双辊-双齿辊破碎机-巩义市裕顺机械制造有限公司 | 挤奶设备过滤纸,牛奶过滤纸,挤奶机过滤袋-济南蓝贝尔工贸有限公司 | 苗木价格-苗木批发-沭阳苗木基地-沭阳花木-长之鸿园林苗木场 | 厂房出租-厂房规划-食品技术-厂房设计-厂房装修-建筑施工-设备供应-设备求购-龙爪豆食品行业平台 | 一点车讯-汽车网站,每天一点最新车讯! | 石油/泥浆/不锈钢防腐/砂泵/抽砂泵/砂砾泵/吸砂泵/压滤机泵 - 专业石油环保专用泵厂家 | 菲希尔X射线测厚仪-菲希尔库伦法测厚仪-无锡骏展仪器有限责任公司 | 校园文化空间设计-数字化|中医文化空间设计-党建|法治廉政主题文化空间施工-山东锐尚文化传播公司 | 辽宁资质代办_辽宁建筑资质办理_辽宁建筑资质延期升级_辽宁中杭资质代办 | 震动筛选机|震动分筛机|筛粉机|振筛机|振荡筛-振动筛分设备专业生产厂家高服机械 | Pos机办理_个人商户免费POS机申请-拉卡拉办理网 | 美国PARKER齿轮泵,美国PARKER柱塞泵,美国PARKER叶片泵,美国PARKER电磁阀,美国PARKER比例阀-上海维特锐实业发展有限公司二部 | 菲希尔FISCHER测厚仪-铁素体检测仪-上海吉馨实业发展有限公司 | 机构创新组合设计实验台_液压实验台_气动实训台-戴育教仪厂 | RO反渗透设备_厂家_价格_河南郑州江宇环保科技有限公司 | 顺辉瓷砖-大国品牌-中国顺辉| 工业洗衣机_工业洗涤设备_上海力净工业洗衣机厂家-洗涤设备首页 bkzzy在职研究生网 - 在职研究生招生信息咨询平台 | 硅胶布|电磁炉垫片|特氟龙胶带-江苏浩天复合材料有限公司 | 【灵硕展览集团】展台展会设计_展览会展台搭建_展览展示设计一站式服务公司 | 达利园物流科技集团-|