JS中判断数据类型的几种方法

news2025/3/9 23:00:57

目录

1.typeof

2.constructor

3.instanceof

4.Object.prototype.toString.call


1.typeof

📙 语法 : typeof(需要判断的数据变量)

📙 特点: 

🍀 对于基本数据类型,除了null外都可以返回正确的结果;对于null,返回的是Object

🍀 对于引用数据类型,除了function外,其余返回的都是一个Object;对于function返回的是function

<script>

   // 1. typeof
        console.log(typeof('123'))  // string
        console.log(typeof(123))  // number
        console.log(typeof(true))  // boolean
        console.log(typeof(undefined))  // undefined
        console.log(typeof([1, 2, 3]))  // object
        console.log(typeof({a:1}))  // object

</script>

2.constructor

📙 语法 : 待检测数据.constructor === class

📙 特点:

🍀 用于判断引用数据类型

🍀 能够判断当前数据的构造函数是谁

🍀 不能判断 undefined 和 null

<script>

   // 2. constructor
        const arr = [1, 2, 3]
        console.log(arr.__proto__.constructor)  // constructor 指向当前这个原型是哪个构造函数的原型
        console.log(arr.constructor)  // constructor 指向当前这个原型是那个构造函数的原型
        console.log(arr.constructor === Array)  // true
        console.log(arr.constructor === Function)  // false


        console.log(arr.__proto__)    // 自己构造函数的原型对象
        console.log(Array.prototype)    // 构造函数 Array 的原型对象
        console.log(Array.prototype.constructor)    // 构造函数 Array 的原型对象


        Array.prototype.constructor = { a: 1 }
        console.log(Array.prototype.constructor)  // {a: 1}
        console.log(arr.__proto__.constructor === Array)  // false

        console.log(undefined.constructor)  // undefined 内部没有 constructor 所以我么不能这样去判断
        console.log(null.constructor)  // null 内部 没有 constructor 所以我们不用这样去判断

</script>

 

3.instanceof

📙 语法:(检测数据 instanceof [class]) ,返回一个true或false

📙 特点:

🍀 可以区分复杂数据类型

🍀 只要是在当前实例对象的原型链上,检测出来的结果就是 true

🍀 不能判断 undefined 和 null

<script>

  const arr = [1, 2, 3]
        const obj = {
            a: 1,
            b: 2
        }
        /**
         *  instanceof
         *      判断左边的构造函数是否等于右边的
        */
        console.log(arr instanceof Array)  //true
        console.log(arr instanceof Function)  //false
        console.log(obj instanceof Array)  //false
        console.log(obj instanceof Object)  //true

        Array.prototype.constructor = { a: 1 }
        console.log(arr instanceof Array)  //true

        console.log(undefined instanceof Array)  //false
        console.log(undefined instanceof Object)  //false
        console.log(undefined instanceof Function)  //false

</script>

 4.Object.prototype.toString.call

📙 语法 : Object.prototype.toString.call(要判断的数据结构)

📙 特点:

🍀 适用于所有数据类型的判断

🍀 Object 这个构造函数的原型内部有一个 toString 的方法,这个方法能够帮我们将数据结构转为字符串的形式    '[object 数据结构]'

🍀 我们在使用的时候 如果需要判断其他数据类型, 需要使用 .call这个方法改变内部 this 指向

<script>

   const arr = [1, 2, 3]
        const obj = {
            a: 1,
            b: 2
        }
        /**
         *  Object 这个构造函数的 原型内部 有一个 toString 的方法
         *      这个方法能够帮我们将数据结构转为字符串的形式    '[object 数据结构]'
         * 
         *      我们在使用的时候 如果需要判断其他数据类型, 需要使用 .call这个方法改变内部 this 指向
         * 
         *  这个方法任何数据类型都能准确判断(推荐使用)
        */
        console.log(Object.prototype.toString.call([]))  // [object Array]
        console.log(Object.prototype.toString.call(function () { }))  // [object Function]
        console.log(Object.prototype.toString.call(undefined))  // [object Undefined]
        console.log(Object.prototype.toString.call(null))  // [object Null]

</script>

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/19262.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

FL Studio21中文版本新增功能FL2023完整版

FL Studio水果简称FL&#xff0c;全称&#xff1a;Fruity Loops Studio&#xff0c;国人习惯叫它水果萝卜。FL软件现有版本是 FL Studio 21&#xff0c;已全面升级支持简体中文语言界面 。 FL Studio 21水果工具更新、新功能和插件FL Studio 21已经发布&#xff0c;并且有许多…

[附源码]java毕业设计日常饮食健康推荐系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

迭代器C11

迭代器 迭代器失效 容器使用迭代器时&#xff0c;不要改变容器的大小 /在操作迭代器的过程中&#xff08;使用了迭代器这种循环体&#xff09;&#xff0c;千万不要改变vectori容器的容量&#xff0c;也就是不要增加或者删除vectori容器中的元素 /往容器中增加或者从容器中删…

python基于百度sdk语音转文字

python基于百度sdk语音转文字 1.安装baidu-aip 这样pip install aip&#xff1b; 2.要是不行的话下载"识别、合成 RESTful API Python SDK ",解压到某个文件夹下面如&#xff1a;d:\AI 百度智能云-管理中心https://console.bce.baidu.com/ai/#/ai/speech/overview/…

【面试题】深入理解Cookie、Session、Token的区别

【面试题】深入理解Cookie、Session、Token的区别 Cookie与Session Cookie Session Cookie与Session之前的联系 Cookie与Session的在请求中的工作流程 Cookie与Session存在问题 Token 什么是Token&#xff1f; 为什么要有token&#xff1f; token认证机制 Token流…

灵界的科学丨五、心灵与意识的科学奥祕

摘自李嗣涔教授《灵界的科学》 每个人都有「自我意识」&#xff0c; 每天睡觉时「我」就不见了&#xff0c; 每天早上醒来时&#xff0c;「我」又回来了&#xff0c; 好像没有太大的改变&#xff0c; 这个「我」的物理现象是什么&#xff1f; 探索科学的最后疆界──意识 …

【感恩系列】:说点事儿 以及 我把所有的粉丝放到了中国地图上啦~

文章目录&#x1f49e;许久不见&#xff0c;甚是想念&#x1f498;初次相遇&#x1f498;为什么写博客&#xff1f;&#x1f498;写博客的收获&#x1f498;此可已无言&#x1f498;中国版图里的我们&#x1f496;设计思路&#xff1a;&#x1f496;具体实现&#x1f495;爬取粉…

【毕业设计】56-辅助驾驶系统的视觉检测\超声波\图像识别\装置研究与设计(原理图工程、仿真工程、低重复率设计文档、答辩PPT、开题报告)

【毕业设计】56-辅助驾驶系统的视觉检测\超声波\图像识别\装置研究与设计&#xff08;原理图工程、仿真工程、低重复率设计文档、答辩PPT、开题报告&#xff09; 文章目录【毕业设计】56-辅助驾驶系统的视觉检测\超声波\图像识别\装置研究与设计&#xff08;原理图工程、仿真工…

HCIP实验2-1:IS-IS 配置实验

实验 2-1 IS-IS 配置实验 实验目标 掌握IS-IS协议基本配置掌握IS-IS协议DIS优先级修改方式掌握IS-IS协议网络类型修改方式掌握IS-IS协议外部路由引入掌握IS-IS接口cost修改方式掌握IS-IS路由渗透配置方式 拓扑图 场景 使用IS-IS协议作为某网络的IGP&#xff0c;R1和R5运行在…

操作系统:操作系统概论

目录前言1. 操作系统概观1.1 操作系统与计算机系统1.1.1 操作系统1.1.2 硬件软件1.1.2.1 硬件1.1.2.2 软件1.1.2.2.1 系统软件&#xff08;操作系统层&#xff09;1.1.2.2.2 支撑软件1.1.2.2.3 应用软件1.2 操作系统资源管理技术1.2.1 资源管理1.2.1.1 资源复用1.2.1.2 资源虚化…

线性代数---第五章特征值和特征向量

1特征值的和等于a11加上a22&#xff0c;特征值的积等于行列式 2利用|λE-A|0求特征值&#xff0c;代入特征值求基础解系&#xff0c;利用基础解系求特征向量 3如果两个特征值相等&#xff0c;那么它们的特征向量也相等 当特征值是二重根时&#xff0c;有可能有一个线性无关的特…

EndNote安装与使用

一、安装 1、双击ENX9Inst.msi安装 2、进入安装目录&#xff0c;使用CHS或ENG里的文件替换安装目录文件 CHS 中文版 ENG 英文版 二、软件优化 1、EndNote Import.enf 此文件用于导入中文文献时期刊名解析错误的问题&#xff0c;右击使用EndNoteX9打开后关闭即可 2、geebin…

Navicat导入SQL文件

安装Navicat 软件下载地址 https://wwz.lanzoub.com/i3T9S0gbq2wd 参考链接接 https://www.cnblogs.com/hhaostudy/p/15898030.html 准备导入SQL文件 新建连接 点击左上角连接 -> 选择MySQL 连接名&#xff1a;任意名称都可以&#xff0c;可输入localhost 主机&#x…

[计算机毕业设计]网络流量的在线恶意应用检测系统

前言 &#x1f4c5;大四是整个大学期间最忙碌的时光,一边要忙着准备考研,考公,考教资或者实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科同学来说是充满挑战。为帮助大家顺利通过…

【Pytorch with fastai】第 17 章 :基础神经网络

&#x1f50e;大家好&#xff0c;我是Sonhhxg_柒&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f4dd;个人主页&#xff0d;Sonhhxg_柒的博客_CSDN博客 &#x1f4c3; &#x1f381;欢迎各位→点赞…

【LeetCode每日一题:799.香槟塔~~~模拟】

题目描述 我们把玻璃杯摆成金字塔的形状&#xff0c;其中 第一层 有 1 个玻璃杯&#xff0c; 第二层 有 2 个&#xff0c;依次类推到第 100 层&#xff0c;每个玻璃杯 (250ml) 将盛有香槟。 从顶层的第一个玻璃杯开始倾倒一些香槟&#xff0c;当顶层的杯子满了&#xff0c;任…

〖全域运营实战白宝书 - 运营角色认知篇①〗- 初识运营,明晰运营的学习路径

✌ 大家好&#xff0c;我是 哈士奇 &#xff0c;一位工作了十年的"技术圈混子"&#xff0c; 致力于为开发者赋能的UP主, 目前正在运营着 TFS_CLUB社区。 ✌ &#x1f4ac; 人生格言&#xff1a;优于别人,并不高贵,真正的高贵应该是优于过去的自己。&#x1f4ac; &am…

ES6 入门教程 14 Set 和 Map 数据结构 14.1 Set

ES6 入门教程 ECMAScript 6 入门 作者&#xff1a;阮一峰 本文仅用于学习记录&#xff0c;不存在任何商业用途&#xff0c;如侵删 文章目录ES6 入门教程14 Set 和 Map 数据结构14.1 Set14.1.1 基本用法14.1.2 Set 实例的属性和方法14.1.3 遍历操作14 Set 和 Map 数据结构 14.1…

[附源码]java毕业设计实验教学过程管理平台

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

【龙芯1B】:74HC595数码管或74HC138数码管程序开发

学习目标&#xff1a;解决龙芯1B&#xff1a;74HC595或74HC138数码管显示问题 首先我们要知道数码管的原理&#xff1b;以74HC595为例&#xff0c;74HC595是具有三态输出功能&#xff08;即具有高电平、低电平和高阻抗三种输出状态&#xff09;的门电路。输出寄存器可以直接清除…