Hello friend, the following is my understanding, I hope it will be helpful to you!
1. The class array has the length attribute, and other objects whose attributes are non-negative integers . The difference is that the class array has no array methods, such as push, and so on.
2. How to generate class arrays? Referring to the characteristics of 1 , we can define an array of classes as follows:
let person = {
0: "",
1: "18",
length: 2
};
3. Judge whether it is a class array or not? According to the description of 1 , you can simply write the following code:
function isLikeArray(o) {
if (typeof o === 'object' && isFinite(o.length) && o.length >= 0 && o.length < 4294967296){
// 4294967296: 2^32
return true
} else {
return false
}
}
4. The commonly used class array is converted to an array, usually using the following two methods:
Array.prototype.slice.call(person);
or
Array.from(person);
Let's not introduce the
array, just talk about array-like objects.
Class array object:
arguments object
NodeList (such as the dataset obtained by document.getElementsByClassName ('a')
typedArray
.
the main difference:
class array objects cannot call methods on array prototypes. is that xx.push (), xx.slice (), xx.indexOf (), and so on, cannot be used.
how to tell if it's a class array object:
you don't have to go to the area to classify array objects, except for the above two. Just distinguish between arrays and objects.
< hr >
You are very observant when you can ask this question.
generally speaking, we all know that arguments
is a class array object. But I don't really know what a class array object is and why arguments belongs to a class array object.
what's the difference between array and class array objects?
they are all accessible to elements through an index, and all have length
attributes; the difference is that class array objects do not have array methods.
how are class array objects generated?
if you want to know how to generate a class array object, you must first understand what a class array object is .
in the new version of the ECMA-262 document, we can see that there is already a related definition .
it must be an object
it has length
attribute
so, an object can be treated as a class array object as long as it has the length
attribute.
this explains how class array objects are generated: declare an object, set its length property, and you produce a class array object.
how do I know something is an array object?
judgment criteria: 1, it is an object; 2, it has length
attribute.
expand here--
by looking at the ECMA-262 document, you can see that there is also CreateListFromArrayLike (argArray)
fromarraylike" rel=" nofollow noreferrer "> built-in function , which is used to receive an array object and convert it into an array.
We cannot call this function externally, but we can call it indirectly through apply ()
. I think this function can indirectly prove whether a variable belongs to a class array object. For example, you can convert parameters to an array through Array.apply (null, arguments)
, where arguments
is a class array object.
if you pass a string to it for us, such as Array.apply (null, '123')
, it will throw an error:
Uncaught TypeError: CreateListFromArrayLike called on non-object
so a string is not an array-like object.
you may wonder why you can use Array.from ()
to convert strings into arrays if the string is not an array-like object. Isn't the purpose of Array.from ()
to convert array-like objects into arrays?
the answer lies in the fact that Array.from ()
internally converts a string into a string object, which is the class array object.
you are welcome to follow the personal official account "front and rear test questions with answers". There happens to be an article discussion on this issue. For more details, please refer to the official account article, which will be listed here for your reference.