网站首页 > 资源文章 正文
如何判断变量是不是数组,这是前端的基础知识。这个问题也经常出现在面试中,有些同学会提出使用 instanceof 判断。但是这种方式在部分场景下是不准确的,今天就和大家一起分析一下。
instanceof 能够检测 构造函数的 prototype 属性是否在对象的原型链上。举个例子说明一下,方便理解。
instanceof 的判断过程是在检测对象的原型链上寻找构造函数的 prototype 属性。
第一个判断结果为 true 是因为 People.prototype 存在于 owen 的原型链上。
第二个判断结果为 false 是因为 String.prototype 不存在于 owen 的原型链上。
简单来说,instanceof 可以判断变量是否是由构造函数生成的。因为数组 Array 也是一个构造函数,所以可以用 instanceof 判断变量是不是数组。
Array.prototype 存在于 arr 的原型链上,其他两个变量的原型链上不存在。
但是这种方式真的能100%判断正确吗?我们再看一下 instanceof 判断的原理,检测构造函数的 prototype 属性是否在对象的原型链上。
如果修改了对象的原型链呢?
修改了 arr 的原型链之后,instanceof 判断就不准确了。
instanceof 在跨 iframe / window 时也会判断错误,因为使用的不是同一个构造函数。举个例子:
const iframeEl = document.createElement('iframe');
document.body.appendChild(iframeEl);
iframeArray = window.frames[window.frames.length - 1].Array;
const array1 = new Array(1,1,1,1);
const array2 = new iframeArray(1,1,1,1);
console.log(array1 instanceof Array); // true
console.log(array2 instanceof Array); // false
总结: 在绝大部分情况下使用 instanceof 能够准确地判断变量是否为数组,但是 instanceof 确实不是完美的办法。
欢迎大家评论转发~
猜你喜欢
- 2024-10-08 instance substance circumstance
- 2024-10-08 百度二面:你了解instanceof原理吗?
- 2024-10-08 「JS很简单」JavaScript 基础之 instanceof操作符
- 2024-10-08 Java程序设计-向下转型、instanceof(笔记)
- 2024-10-08 谷歌Chrome浏览器开放Instance Switcher功能
- 2024-10-08 深入了解,Python 中 type 和 isinstance 的用法
- 2024-10-08 性能高、上手快,实体类转换工具 MapStruct 到底有多强大
- 2024-10-08 深入分析java中的instanceof关键字
- 2024-10-08 讲解python中assert、isinstance的用法,这个思维方式能理解吗?
- 2024-10-08 今天我们就来搞懂call()源码instanceof源码和类型转换
你 发表评论:
欢迎- 最近发表
-
- UG10.0UG12.0教程,共63章节,送给那些正在自学UG编程的朋友
- UG产品图档下载,连筋薄板,外形铣、孔铣都要用
- 天正建筑 T30V1.0 下载安装教程(支持CAD2025)
- 教你如何开启UG NX12.0设置保护加密(文件密码)
- UG NX 8.5 安装教程,安装过程就是这么简单
- ug安装教程详细步骤ug怎么免费安装教程ug软件怎样安装步骤
- UG/NX安装失败,如何才能彻底删除(卸载)UG/NX?6步就能解决
- UG8.5 正式版安装方法(ug8.8安装)
- ug12.0版安装教程与安装包免费下载 #ug安装
- China-EU 50 years: Advancing stability and prosperity through partnership
- 标签列表
-
- 电脑显示器花屏 (79)
- 403 forbidden (65)
- linux怎么查看系统版本 (54)
- 补码运算 (63)
- 缓存服务器 (61)
- 定时重启 (59)
- plsql developer (73)
- 对话框打开时命令无法执行 (61)
- excel数据透视表 (72)
- oracle认证 (56)
- 网页不能复制 (84)
- photoshop外挂滤镜 (58)
- 网页无法复制粘贴 (55)
- vmware workstation 7 1 3 (78)
- jdk 64位下载 (65)
- phpstudy 2013 (66)
- 卡通形象生成 (55)
- psd模板免费下载 (67)
- shift (58)
- localhost打不开 (58)
- 检测代理服务器设置 (55)
- frequency (66)
- indesign教程 (55)
- 运行命令大全 (61)
- ping exe (64)
本文暂时没有评论,来添加一个吧(●'◡'●)