当前位置:网站首页>判断变量是否为数组
判断变量是否为数组
2022-07-05 13:57:00 【前端西瓜哥】
大家好,我是前端西瓜哥,今天带大家学习在 JS 中如何判断一个对象是否为数组。
Array.isArray
最好的写法是使用 Array.isArray(val)
。
因为该方法能正确判断 iframe 传过来的变量。
instanceof
val instanceof Array
对于一个普通数组,它的原型链是这样的:
数组实例 -> Array.protype -> Object.prototype -> null
如果一个变量是数组,那它的原型链上就一定会有 Array.prototype。
instanceof 的原理其实就左值沿着它的原型链,和右侧值的 prototype 属性比较,看是否相等。找到相等的就返回 true,否则返回 false。
但 instanceof 无法处理 iframe 的变量,因为 iframes 的 Array 并不是当前页面的 Array,它们指向各自的内存空间。
const iframe = document.createElement('iframe');
document.body.appendChild(iframe);
const ArrayInFrame = window.frames[0].Array; // iframe中的构造函数
const arr = new ArrayInFrame();
arr instanceof Array // false
Array.isArray(arr); // true
只要是能判断 对象是否在原型链上 的方法都是可以的用来判断是否为数组的,所以你还可以用:
// isPrototypeOf 方法
// Array.prototype 是否在 val 的原型链上
Array.prototype.isPrototypeOf(val);
// getPrototypeOf 方法
// val 的上一个原型是否为 Array.prototype
Object.getPrototypeOf(val) === Array.prototype
Object.prototype.toString.call
Object.prototype.toString.call(val) === '[object Array]';
对象都可以通过 toString 方法生成一个字符串,对于对象,通常会返回 [object Xxx]
的形式的字符串,对于数组,则会返回 [object Array]
。
结尾
考虑到要兼容 iframe 的变量,所以建议使用 Array.isArray 方案。
此外判断数组还可以使用查找原型链对象的方法,以及通过 toString 得到的字符串的方法。
我是前端西瓜哥,欢迎关注我,掌握更多前端面试题。
边栏推荐
- UE源码阅读[1]---由问题入手UE中的延迟渲染
- [South China University of technology] information sharing of postgraduate entrance examination and re examination
- 登录界面代码
- Requests + BS4 crawl Douban top250 movie information
- 明峰医疗冲刺科创板:年营收3.5亿元 拟募资6.24亿
- Jetpack Compose入门到精通
- Those things I didn't know until I took the postgraduate entrance examination
- 物联网应用技术专业是属于什么类
- 我为什么支持 BAT 拆掉「AI 研究院」
- Introduction to Chapter 8 proof problem of njupt "Xin'an numeral base"
猜你喜欢
随机推荐
asp. Net read TXT file
Matlab learning 2022.7.4
Liar report query collection network PHP source code
The development of speech recognition app with uni app is simple and fast.
Aspx simple user login
Scientific running robot pancakeswap clip robot latest detailed tutorial
[buuctf.reverse] 152-154
Google EventBus 使用详解
PHP generate Poster
Datapipeline was selected into the 2022 digital intelligence atlas and database development report of China Academy of communications and communications
js 从一个数组对象中取key 和value组成一个新的对象
几款分布式数据库的对比
Ueditor + PHP enables Alibaba cloud OSS upload
LeetCode_3(无重复字符的最长子串)
嵌入式软件架构设计-消息交互
WebRTC的学习(二)
OSI and tcp/ip protocol cluster
【云资源】云资源安全管理用什么软件好?为什么?
金融壹账通香港上市:市值63亿港元 叶望春称守正笃实,久久为功
Kotlin协程利用CoroutineContext实现网络请求失败后重试逻辑