当前位置:网站首页>JS several ways to judge whether an object is an array
JS several ways to judge whether an object is an array
2022-07-06 13:50:00 【Ling Xiaoding】
js Several ways to determine whether an object is an array
1. adopt instanceof Judge
instanceof
Operator is used to verify the of the constructor prototype
Whether the attribute appears anywhere in the object's prototype chain , Returns a Boolean value .
let a = [];
a instanceof Array; //true
let b = {
};
b instanceof Array; //false
Existing problems :
It should be noted that ,prototype
Properties can be modified , So it was not initially judged that true
It must always be true .
secondly , When our script has multiple global environments , for example html
Has more than one iframe
object ,instanceof
The verification results may not meet the expectations , for example :
// by body Create and add a iframe object
var iframe = document.createElement('iframe');
document.body.appendChild(iframe);
// obtain iframe Method for constructing an array of objects
xArray = window.frames[0].Array;
// Get an instance through the constructor
var arr = new xArray(1,2,3);
arr instanceof Array;//false
The cause of this problem is iframe
Will create a new global environment , It will also have its own Array.prototype
attribute , It's obviously unsafe to have the same attributes in different environments , therefore Array.prototype !== window.frames[0].Array.prototype
, to want to arr instanceof Array
by true
, You have to promise arr
It's made up of primitive Array
Only when the constructor is created .
2. adopt constructor Judge
We know , Constructor property of the instance constructor
Pointing constructor , Then through the constructor
Property can also determine whether it is an array .let a = [1,3,4]
;a.constructor === Array;//true
Again , This judgment will also have multiple global environment problems , Resulting problems and instanceof
identical .
// by body Create and add a iframe label
var iframe = document.createElement('iframe');
document.body.appendChild(iframe);
// obtain iframe Method for constructing an array of objects
xArray = window.frames[window.frames.length-1].Array;
// Get an instance through the constructor
var arr = new xArray(1,2,3);
arr.constructor === Array;//false
3. adopt Object.prototype.toString.call() Judge
Object.prototype.toString().call()
You can get different types of objects , for example
let a = [1,2,3]
Object.prototype.toString.call(a) === '[object Array]';//true
Its strength lies in that it can not only check whether it is an array , For example, whether it is a function , Is it a number, etc
// Check whether it is a function
let a = function () {
};
Object.prototype.toString.call(a) === '[object Function]';//true
// Check whether it is a number
let b = 1;
Object.prototype.toString.call(a) === '[object Number]';//true
Even for multi global environments , Object.prototype.toString().call()
It can also meet the expected processing judgment .
// by body Create and add a iframe label
var iframe = document.createElement('iframe');
document.body.appendChild(iframe);
// obtain iframe Method for constructing an array of objects
xArray = window.frames[window.frames.length-1].Array;
// Get an instance through the constructor
var arr = new xArray(1,2,3);
console.log(Object.prototype.toString.call(arr) === '[object Array]');//true
4. adopt Array.isArray() Judge
Array.isArray()
Used to determine whether the passed value is an array , Returns a Boolean value .
let a = [1,2,3]
Array.isArray(a);//true
Simple to use , And for multi global environments ,Array.isArray()
It can also accurately judge , But there's a problem ,Array.isArray()
Is in ES5 It is proposed that , That is to say ES5
This method may not be supported before . How to solve it ?
The final recommendation for judging array methods
Of course, I still use Array.isArray()
, from ES5
newly added isArray()
Method is to provide a stable and usable array judgment method , It is impossible to put forward good things specifically for this purpose without , And for ES5 Problems that previously did not support this method , In fact, we can do compatibility and self encapsulation , like this :
if (!Array.isArray) {
Array.isArray = function(arg) {
return Object.prototype.toString.call(arg) === '[object Array]';
};
}
边栏推荐
- 7-4 散列表查找(PTA程序设计)
- Inaki Ading
- [中国近代史] 第六章测验
- Floating point comparison, CMP, tabulation ideas
- FAQs and answers to the imitation Niuke technology blog project (III)
- MySQL中count(*)的实现方式
- MySQL lock summary (comprehensive and concise + graphic explanation)
- ABA问题遇到过吗,详细说以下,如何避免ABA问题
- [the Nine Yang Manual] 2019 Fudan University Applied Statistics real problem + analysis
- The latest tank battle 2022 full development notes-1
猜你喜欢
Difference and understanding between detected and non detected anomalies
5. Function recursion exercise
7. Relationship between array, pointer and array
The latest tank battle 2022 - Notes on the whole development -2
2. C language matrix multiplication
(original) make an electronic clock with LCD1602 display to display the current time on the LCD. The display format is "hour: minute: Second: second". There are four function keys K1 ~ K4, and the fun
仿牛客技术博客项目常见问题及解答(三)
扑克牌游戏程序——人机对抗
附加简化版示例数据库到SqlServer数据库实例中
Wei Pai: the product is applauded, but why is the sales volume still frustrated
随机推荐
js判断对象是否是数组的几种方式
Redis的两种持久化机制RDB和AOF的原理和优缺点
Mode 1 two-way serial communication is adopted between machine a and machine B, and the specific requirements are as follows: (1) the K1 key of machine a can control the ledi of machine B to turn on a
实验四 数组
C语言入门指南
Beautified table style
受检异常和非受检异常的区别和理解
Leetcode. 3. Longest substring without repeated characters - more than 100% solution
[中国近代史] 第六章测验
Have you encountered ABA problems? Let's talk about the following in detail, how to avoid ABA problems
[the Nine Yang Manual] 2021 Fudan University Applied Statistics real problem + analysis
Implementation principle of automatic capacity expansion mechanism of ArrayList
为什么要使用Redis
7-8 7104 约瑟夫问题(PTA程序设计)
Caching mechanism of leveldb
Wechat applet
魏牌:产品叫好声一片,但为何销量还是受挫
About the parental delegation mechanism and the process of class loading
Using spacedesk to realize any device in the LAN as a computer expansion screen
实验九 输入输出流(节选)