细说JS系列(二十一)—类型检测

61 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第21天,点击查看活动详情

铃铛说点题外话

一句话前情回顾:JS的两种数据类型:基本数据类型(Number、String、Boolean、Null、undefined、Symbol和Bigint)和复杂数据类型(Array、function、Object、Date等等)。基本数据类型存储在栈内存,复杂数据类型存储在堆内存。可以使用typeof判断数据类型,但是只能判断除null以外的基本数据类型,堆null会判断为Object,对于复杂数据类型Array和Object都会被判断为Object

一句话介绍今天:JS对数据类型的检测

铃铛说正文

image.png

上一篇说了typeof可以判断JS的数据类型,除了这个方法我们还有其他的方法嘛?

数据类型检测

  1. typeof

    这里不详细叙述了

  2. instanceof 可以正确的判断对象的类型,因为内部机制是通过判断对象的原型链中是不是能找到类型的 prototype

    instanceof 可以准确地判断复杂引用数据类型,但是不能正确判断基础数据类型;因为它的输出是Bollean类型

  3. constructor

console.log((2).constructor === Number); // true

输出也是Boolean,可以判断出基本数据类型和复杂数据类型。但是他也有个缺点,如果我创建一个对象,更改它的原型,它就会判断更改的后的原型。

  1. Object.prototype.toString.call()

    返回当前实例所属类信息。

    • 这是因为toString()是Object的原型方法,调用该方法会返回统一格式的字符串。对于Object类型调用这个方法就能直接返回数据类型。
    • 对于其他对象,则需要调用call方法才能返回正确的信息。

关于JS类型判断大概就是以上四种方法,在日常开发过程中我们比较常用的就是typeofinstanceof两种

跟铃铛说再见

学习的最后一步:放松

今日冷笑话:今天发廊,我问发妹子:这里洗剪吹要多少钱?妹子:最低30元!我:那洗剪呢?妹子: 25元!我:好吧,那麻烦你帮我吹一下!

放松结束,猜猜明天会说讲些什么吧