[javascript核心-09] 彻底解决js中的类型检测方案

这篇具有很好参考价值的文章主要介绍了[javascript核心-09] 彻底解决js中的类型检测方案。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

typeof
  1. 基于数据类型的值(二进制)进行检测
  2. 返回结果为字符串
  3. typeof NaN结果为number
  4. typeof null结果为Object.对象存储以000开头,而null也是如此。
  5. typeof不能细分对象,结果都是Object
  6. typeof function(){}结果为function
instanceof
  1. 检测某个构造函数是否出现在某实例的原型链上
  2. 返回结果为boolean值
  3. [] instanceof Arraytrue, [] instanceof Objecttrue。原型可手动修改,因此检测结果也会被篡改。
  4. 不能检测基本数据类型。1 instanceof Numberfalse
constructor
  1. 检测某个函数是否是某实例的构造函数
  2. 返回结果为boolean值
  3. 可以检测基本数据类型
  4. constructor可手动修改,因此检测结果也会被篡改。
Object.prototype.toString.call()
  1. 返回当前实例所属类的信息
Object.prototype.toString.call(1) // '[object Number]'
Object.prototype.toString.call('1') // '[object String]'
Object.prototype.toString.call(true) // '[object Boolean]'
Object.prototype.toString.call(null) // '[object Null]'
Object.prototype.toString.call(undefined) // '[object Undefined]'
Object.prototype.toString.call(Symbol(1)) // '[object Symbol]'
Object.prototype.toString.call(/^/) // '[object RegExp]'
Object.prototype.toString.call(new Date) // '[object Date]'
Object.prototype.toString.call([]) // '[object Array]'
Object.prototype.toString.call({}) // '[object Object]'
Object.prototype.toString.call(()=>{}) // '[object Function]'
Object.prototype.toString.call(1n) // '[object BigInt]'
Object.prototype.toString.call(new Error()) // '[object Error]'
最佳实践
  1. typeof 可以检测基本数据类型的值(除 Null 以外)
  2. 其他的类型可以用Object.prototype.toString.call()
封装数据类型检测的方法

目标:能够对Number,String,Boolean,Null,Undefined,Symbol,RegExp,Date,Array,Object,Function,Error,BigInt全部类型值进行细分检测。

类型检测函数

function toType(obj){
    const classType = {};
    ['Number','String','Boolean','Null','Undefined','Symbol','RegExp','Date','Array','Object','Function','Error','BigInt'].forEach(name => {
        classType[`[object ${name}]`] = name.toLowerCase()
    });

    function _toType(obj){
        if(obj == null) return obj + ''
        return typeof obj === 'object' || typeof obj === 'function' ? classType[toString.call(obj)] || 'object' : typeof obj
    }
    return _toType(obj)
}

进行测试:

// 测试
[1,'1',true,null,undefined,Symbol(1),/^/,new Date(),[],{},()=>{},new Error(),100n].forEach(obj => {
    console.log(toType(obj))
})

/*
number
string
boolean
null
undefined
symbol
regexp
date
array
object
function
error
bigint
*/

建立映射表进行比对:

const map = [
    [1,'number'],
    ['1','string'],
    [true,'boolean'],
    [null,'null'],
    [undefined,'undefined'],
    [Symbol(1),'symbol'],
    [/^/,'regexp'],
    [new Date(),'date'],
    [[],'array'],
    [{},'object'],
    [()=>{},'function'],
    [new Error(),'error'],
    [100n,'bigint']
]

for (const tuple of map) {
    console.log(toType(tuple[0]) === tuple[1])
}

/*
true
true
true
true
true
true
true
true
true
true
true
true
true
*/

本文github地址:JavaScript_Everything 大前端知识体系与面试宝典,从前端到后端,全栈工程师,成为六边形战士文章来源地址https://www.toymoban.com/news/detail-593524.html

到了这里,关于[javascript核心-09] 彻底解决js中的类型检测方案的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 非法指令 (核心已转储) 彻底解决方案

    之前在Nano上,经常运行程序的时候,遇到一个问题:非法指令 (核心已转储)。 在/usr/lib/python3/dist-packages/这个路径下,Nano自带了很多配置的包。在这里,numpy的版本是1.13.1(这个包现在已经直接pip安装不了了),但是后面我们自己pip安装的时候,(比如配置pytorch)安装了高版

    2024年02月15日
    浏览(8)
  • JavaScript类型检测【全】

    类型检测的方法: typeof instanceof Object.prototype.toString constructor typeof 操作符返回一个字符串,表示未经计算的操作数的类型。 typeof 操作符适合对 基本类型 (除 null 之外)及 function 的检测使用,而对引用数据类型(如 Array)等不适合使用。 instanceof 运算符用于检测一个对象在

    2024年01月17日
    浏览(12)
  • JavaScript数据类型检测与数据类型转换详细解析与代码实例

    JavaScript是一种弱类型语言,因此在开发过程中,经常需要进行数据类型检测和数据类型转换。本文将详细介绍JavaScript中的数据类型检测和转换,并提供相关的代码实例。 一、数据类型检测 在JavaScript中,常用的数据类型有:数字、字符串、布尔值、null、undefined、对象和数组

    2024年02月05日
    浏览(13)
  • JavaScript基础:js介绍、变量、数据类型以及类型转换

    JavaScript基础:js介绍、变量、数据类型以及类型转换

      目录 介绍 引入方式 内部方式 外部形式 注释和结束符 单行注释 多行注释 结束符 输入和输出 输出 输入 变量 声明 赋值 变量名命名规则 常量 数据类型 数值类型 字符串类型 布尔类型 undefined 类型转换 隐式转换 显式转换 Number 📖引入方式 JavaScript 程序不能独立运行

    2024年04月27日
    浏览(12)
  • 【JavaScript】JS——Map数据类型

    【JavaScript】JS——Map数据类型

    存储键值对的对象。 能够记住键的原始插入顺序 任何值(对象或原始值)都可以作为键或值。 Map中的一个键 只能出现一次 ,新的值会覆盖旧的值。 迭代方式:for…of循环,返回一个 [key,value] 的数组。 键的相等:基于零值相等比较 Map与Object的比较 Map默认不包含任何键。

    2024年02月04日
    浏览(11)
  • 〖大前端 - 基础入门三大核心之JS篇㉓〗- JavaScript 的「数组」

    〖大前端 - 基础入门三大核心之JS篇㉓〗- JavaScript 的「数组」

    当前子专栏 基础入门三大核心篇 是免费开放阶段 。 推荐他人订阅,可获取扣除平台费用后的35%收益,文末名片加V! 说明:该文属于 大前端全栈架构白宝书专栏, 目前阶段免费开放 , 购买任意白宝书体系化专栏可加入 TFS-CLUB 私域社区。 福利:除了通过订阅\\\"白宝书系列专

    2024年02月04日
    浏览(13)
  • 〖大前端 - 基础入门三大核心之JS篇㉟〗- JavaScript 的DOM简介

    〖大前端 - 基础入门三大核心之JS篇㉟〗- JavaScript 的DOM简介

    说明:该文属于 大前端全栈架构白宝书专栏, 目前阶段免费 , 如需要项目实战或者是体系化资源,文末名片加V! 作者:不渴望力量的哈士奇(哈哥),十余年工作经验, 从事过全栈研发、产品经理等工作,目前在公司担任研发部门CTO。 荣誉: 2022年度博客之星Top4、2023年度超

    2024年02月04日
    浏览(15)
  • web前端框架JS学习之JavaScript类型转换

    web前端框架JS学习之JavaScript类型转换

    vascript有多种数据类型,如字符串、数字、布尔等,可以通过typeof语句来查看变量的数据类型。数据类型转换就是数据类型之间相互转换,比如把数字转成字符串、把布尔值转成字符串、把字符串转成数字等,这在工作也是经常碰到的。 本期我们就给大家说说web前端框架JS学

    2024年02月10日
    浏览(47)
  • 〖大前端 - 基础入门三大核心之JS篇㉔〗- JavaScript 的数组的常用方法 (一)

    〖大前端 - 基础入门三大核心之JS篇㉔〗- JavaScript 的数组的常用方法 (一)

    当前子专栏 基础入门三大核心篇 是免费开放阶段 。 推荐他人订阅,可获取扣除平台费用后的35%收益,文末名片加V! 说明:该文属于 大前端全栈架构白宝书专栏, 目前阶段免费开放 , 购买任意白宝书体系化专栏可加入 TFS-CLUB 私域社区。 福利:除了通过订阅\\\"白宝书系列专

    2024年02月07日
    浏览(11)
  • javascript中的错误类型

    javascript中的错误类型

    javascript 中的错误类型: SyntaxError TypeError ReferenceError RangeError URLError Error 语法错误 TypeError 表示类型错误。当您使用不打算以特定方式使用的东西时,就会发生类型错误。例如,用螺丝刀敲钉子,而不是用锤子。 ReferenceError 表示引用错误。当找不到变量的引用、在变量作用域

    2024年02月06日
    浏览(8)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包