首页 > 其他分享 >JS【详解】数据类型检测(含获取任意数据的数据类型的函数封装、typeof、检测是否为 null、检测是否为数组、检测是否为非数组/函数的对象)

JS【详解】数据类型检测(含获取任意数据的数据类型的函数封装、typeof、检测是否为 null、检测是否为数组、检测是否为非数组/函数的对象)

时间:2024-08-11 18:22:55浏览次数:15  
标签:null val 检测 Object 数据类型 数组 Array prototype

【函数封装】获取任意数据的数据类型

/**
 * 获取任意数据的数据类型
 *
 * @param x 变量
 * @returns 返回变量的类型名称(小写字母)
 */
function getType(x) {
  // 获取目标数据的私有属性 [[Class]] 的值
  const originType = Object.prototype.toString.call(x); // 以字符串为例:'[object String]'
  // 获取类型属性值中' '的下标
  const spaceIndex = originType.indexOf(" ");
  // 截取类型属性值中' '到末尾']'之间的字符串
  const type = originType.slice(spaceIndex + 1, -1); // 以字符串为例:'String'
  // 将字符串转换为小写
  return type.toLowerCase(); //以字符串为例:'string'
}

typeof 运算符

适用于检测值类型( null 除外 )、函数和类的数据类型,对引用类型的数据只能得到 object

参数返回值
数值number
字符串string
布尔型boolean
undefinedundefined
nullobject
Symbol 数据symbol
NaNnumber
Infinitynumber
函数function
class类function
数组等对象object

检测是否为 null

if (x === null) {
  console.log("x 的数据类型为 null");
}

检测是否为数组

Array.isArray(val)
val instanceof Array
Object.prototype.toString.call(val) === '[object Array]'
val?.constructor === Array
Object.getPrototypeOf(val) === Array.prototype
// isPrototypeOf() 方法用于测试一个对象是否存在于另一个对象的原型链上。
Array.prototype.isPrototypeOf(val)

检测是否为非数组/函数的对象

Object.prototype.toString.call(val) === '[object Object]' 
val?.constructor === Object
Object.getPrototypeOf(val) === Object.prototype

标签:null,val,检测,Object,数据类型,数组,Array,prototype
From: https://blog.csdn.net/weixin_41192489/article/details/141062696

相关文章

  • USB type-c CC管脚如何做到正反接检测功能
    USBType-C连接器的CC(ConfigurationChannel)管脚用于实现插头方向检测和电源管理。具体来说,USBType-C连接器具有两个CC管脚:CC1和CC2。正反接检测功能的实现主要依赖于这两个CC管脚的电压状态。正反接检测原理CC管脚的布局:在USBType-C接口中,CC1和CC2分......
  • PostgreSQL的数据类型
    PostgreSQL的数据类型1.布尔类型1.1布尔值对应表在Postgresql数据库中Boolean的值除了“true”(真)、“false”(假),还有一个“unknown”(未知)状态。如果是unknown时用NULL表示。布尔类型在Postgresql中可以用不带引号的TRUE或FALSE表示,也可以用更多表示真和假的带引号的字符表示:......
  • Java数组小白版
    一、数组概念一、数组定义数组就是指在计算机内存中开辟的连续存储空间,用于存放程序运行中需要用到的一组相同类型数据的容器。二.数组的声明+数组的长度定义数组时需要确定数组的长度(元素的个数),确定后不能更改;获取数组长度:数组名.length1.格式1(默认初始值)数据类型[]......
  • 数组应用实例-三子棋
    目录1.文件组织2.test.c文件的架构2.1主函数2.2菜单2.3游戏2.3.1棋盘初始化:2.3.2下棋过程2.3.3判断输赢3.具体函数声明与实现3.1初始化棋盘3.2打印棋盘3.3玩家下棋3.4判断输赢3.5棋盘占满3.6电脑下棋4.最后调整1.文件组织采用多文件组......
  • 解决LocalDateTime返回前端数据为数组结构的问题
    问题现象解决办法如下1、使用@JsonFormat@JsonFormat(pattern="yyyy-MM-ddHH:mm:ss",timezone="GMT+8")结果2、使用SpringMVC提供的ExtendMessageConverters@Slf4j@ConfigurationpublicclassWebMvcConfigextendsWebMvcConfigurationSupport{/**......
  • 25版王道数据结构课后习题详细分析 第三章栈、队列和数组 3.2 队列 选择题部分
    一、单项选择题————————————————————————————————————————解析:栈和队列的逻辑结构都是线性结构,都可以采用顺序存储或链式存储,C显然也错误。只有D才是栈和队列的本质区别,限定表中插入和删除操作位置的不同。正确答案:D—————......
  • 【信号变化检测】使用新颖的短时间条件局部峰值速率特征进行信号变化/事件/异常检测(Ma
     ......
  • 【信号变化检测】使用新颖的短时间条件局部峰值速率特征进行信号变化/事件/异常检测(Ma
     ......
  • Java 入门探索者09(数组)
    Java的数组是一种固定大小、有序且相同类型元素的集合。它可以存储同一种数据类型的多个元素,并按照索引顺序访问这些元素。Java数组的特点包括:1.长度固定:一旦数组被创建,其长度就不能修改。可以通过数组的length属性来获取数组的长度。2.有序性:数组中的元素按照索引顺序排......
  • 两数之和Ⅱ——输入有序的数组
    给你一个下标从 1 开始的整数数组 numbers ,该数组已按 非递减顺序排列  ,请你从数组中找出满足相加之和等于目标数 target 的两个数。如果设这两个数分别是 numbers[index1] 和 numbers[index2] ,则 1<=index1<index2<=numbers.length 。以长度为2的整数......