JS之判断是否为对象或数组的几种方式总结
作者:前端@小菜 发布时间:2024-08-12 04:07:18
JS判断是否为对象或数组的几种方式
判断值是否是对象
1.toString 方式【常用】
Object.prototype.toString.call(val) === '[object Object]' // true 代表为对象
注意:这里要使用 call 方法改变作用域
2.constructor 方式
val?.constructor === Object // true 代表为对象
这里使用了 null 传导符(?.) 以防止出错
3.typeof 与 instanceof
typeof 与 instanceof 并不能完全判断一个值为对象
typeof 的取值有:
"
undefined
"——如果这个值未定义;"
boolean
"——如果这个值是布尔值;"
string
"——如果这个值是字符串;"
number
"——如果这个值是数值;"
object
"——如果这个值是对象(包括数组)或null;"
function
"——如果这个值是函数;"
symbol
"——如果这个值是Symbol
instanceof 操作符对于数组和对象都返回 true
[] instanceof Object // true
new Object instanceof Object // true
4.__proto__ 方式【不推荐】
__proto__属性,用来读取或设置当前对象的 prototype 对象,此属性未纳入标准,不建议使用。
val.__proto__ === Object.prototype // true 代表为对象
5.Object.getPrototypeOf 方式
Object.getPrototypeOf(),用来读取对象的 prototype 对象。
Object.getPrototypeOf(val) === Object.prototype // true 代表为对象
判断值是否为数组
1.toString 方式
Object.prototype.toString.call(val) === '[object Array]' // true 代表为数组
注意:这里要用 Object 的 toString 方法,Array 的 toString 返回的是拼接的字符串
var colors = ['red', 'blue', 'green'];
console.log(colors.toString()); // red,blue,green
2.Array.isArray 方法【推荐】
ES5中提供了 isArray 方法用来判断值是否为数组
Array.isArray(val) // true 代表为数组
3.instanceof 方式
val instanceof Array // true 代表为数组
为什么 instanceof 可以用来判断数组而不可以判断对象呢?因为数组本身就是一个类似于列表的高阶对象。
4.constructor 方式
val?.constructor === Array // true 代表为数组
5. __proto__ 方式【不推荐】
val.__proto__ === Array.prototype // true 代表为数组
6.Object.getPrototypeOf 方式
Object.getPrototypeOf(val) === Array.prototype // true 代表为数组
7.isPrototypeOf 方式
isPrototypeOf() 方法用于测试一个对象是否存在于另一个对象的原型链上。
Array.prototype.isPrototypeOf(val) // true 代表为数组
该方式不能用来判断对象!
如何判断一个对象是不是数组(例子解释)
先上代码
let shuzu=[];
shuzu.push(1,2,3,43); //向数组里添加几项
console.log(shuzu); //打印这个数组
console.log(Array.isArray(shuzu)); //方法1
console.log(shuzu instanceof Array); //方法2
console.log(Array.prototype.isPrototypeOf(shuzu)); //方法3
console.log(Object.prototype.toString.call(shuzu)); //方法4
结果:
四种方法我简称方法1,方法2,方法3,方法4。
方法1:Array.isArray(…),这是JS已经提供的判断一个对象是不是数组的方法
方法2: … instanceof Array,instanceof是用来判断引用类型的方法,而type则是用来判断基本类型的方法,instanceof 运算符用来测试一个对象在其原型链中是否存在一个构造函数的 prototype 属性,返回一个布尔值。
方法3:Array.prototype.isPrototypeOf(…),利用isPrototypeOf()方法,判定Array是不是在obj的原型链中,如果是,则返回true,否则false。
方法4:Object.prototype.toString.call(…),根据对象的class属性(类属性),跨原型链调用toString()方法,在js中一个对象一旦被创建,在内部会携带创建对象的类型名,js中提供了调用对象原型中的toString方法,也就是其中call可以这么理解,相当于对象去借用这个 Object.prototype.toString();
来源:https://blog.csdn.net/qq_39025670/article/details/110233270


猜你喜欢
- 前言因近期进行时间序列分析时遇到了数据预处理中的缺失值处理问题,其中日期缺失和填充在网上没有找到较好较全资料,耗费了我一晚上工作时间,所以下
- 首先要扩展自带的auth_user表我就放个图吧,同时setting中应该设置:# 此处重载是为了使UserProfile生效AUTH_US
- 目录互斥锁读写互斥锁先来看这样一段代码,所存在的问题:var wg sync.WaitGroupvar x int64func main()
- 1.先检查系统是否装有mysqlrpm -qa | grep mysql2.下载mysql的repo源(5.7)wget -i -c htt
- mysql 创建的优化就是加索引,可是有时候会遇到加索引都没法达到想要的效果的情况,加上了所以,却还是搜索的全数据,原因是sqlEXPLAI
- 本文实例讲述了JavaScript数据库TaffyDB用法。分享给大家供大家参考。具体如下:TaffyDB 是一个免费开源的 JavaScr
- 本文实例为大家分享了python+logging+yaml实现日志分割的具体代码,供大家参考,具体内容如下1、建立log.yaml文件ver
- 在开始聊我在阿里四个月的网页推广设计之前,我想先来说说我对平面设计和网页设计的认识。它们之间的交集。它们都是集艺术创作、电脑技术和数字技术于
- 1、序言  上一节快速搭建Express开发系统步骤,对如何使用express-generator创建一
- Python字符编码目前计算机内存的字符编码都是Unicode,目前国内的windows操作系统采用的是gbk。python2默认的字符编码
- 本文实例讲述了Yii2 assets清除缓存的方法。分享给大家供大家参考,具体如下:use vendor\myVendorName\myPa
- 我们打开程序后,会发现电脑的内存和cpu发生了变化。在对于前者上面,自然是希望内容占用小,cpu的利用越高越好。那有没有什么方法可以让我们的
- 安装数据可视化模块matplotlib:pip install matplotlib导入matplotlib模块下的pyplot1 折线图f
- 写一个循环删除的过程。 create or replace procedure delBigTab(p_TableName in varch
- MySQL 客户端连接成功后,通过 show [session|global]status 命令 可以提供服务器状态信息,也可以在操作系统上
- 使用Resample函数转换时间序列 一、什么是resample函数?它是Python数据分析库Pandas的方法函数。它主要用于
- MySQL开启通用查询日志general log mysql打开general log之后,所有的查询语句都可以在general log文件
- 本文实例讲述了JavaScript实现模仿桌面窗口的方法。分享给大家供大家参考。具体如下:这里使用JS模仿了桌面窗口的移动、八个方向的缩放、
- 问题问题1:如何解决事务提交时flush redo log带来的性能损失WAL是实现事务持久性(D)的一个常用技术,基本原理是将事务的修改记
- 使用 os.open 打开文件无论是读文件还是写文件,都要先打开文件。说到打开文件,估计首先想到的就是内置函数 open(即 io.open