Javascript array isArray() is an inbuilt function that determines whether the passed value is an array or not. If the value is an array, then true is returned; otherwise, false is return. When checking for the Array instance, the isArray() function is preferred over the instanceof because it works through iframes.
isArray() method is used to check if an object is an array. The Array. isArray() method returns true if an object is an array, otherwise returns false .
The typeof keyword is used to differentiate primitive types in JavaScript. It will return one of nine strings: undefined , object (meaning null), boolean , number , bigint , string , symbol , function , or object (meaning any object, including arrays).
To check if a value is an array of specific type in TypeScript: Use the Array. isArray() method to check if the value is an array. Iterate over the array and check if each value is of the specific type.
1.What is the difference between these two solutions?
isArray is an ES5 method so not supported by older browsers, but it reliably determines if an object is an Array.
instanceof only checks if Array.prototype is on an object's [[Prototype]]
chain. It fails when checking arrays across frames since the Array constructor used for the instance will likely be different to the one used for the test.
2.Which of these two is the preferred solution?
"Preferred" assumes some criterion for selection. Generally, the preferred method is something like:
if (Object.prototype.toString.call(obj) == '[object Array]')
which suits ES3 browsers and works across frames. If only ES5 browsers are in consideration, isArray is likely OK.
3.Which has a faster process time?
Largely irrelevant, since the processing time for both is negligible. Far more important to select the one that is reliable. An Array.isArray method can be added to browsers that don't have it built–in using:
if (!Array.isArray) {
Array.isArray = function(obj) {
return Object.prototype.toString.call(obj) == '[object Array]';
}
}
Difference between Array.isArray(item)
and item instanceof Array
As Felix Kling mentioned in the comment, instanceof Array
doesn't work across iframes. To give you a specific example, try the following code:
var iframeEl = document.createElement('iframe');
document.body.appendChild(iframeEl);
iframeArray = window.frames[window.frames.length - 1].Array;
var array1 = new Array(1,1,1,1);
var array2 = new iframeArray(1,1,1,1);
console.log(array1 instanceof Array); // true
console.log(Array.isArray(array1)); // true
console.log(array2 instanceof Array); // false
console.log(Array.isArray(array2)); // true
As you see in the example above, array created with the Array constructor in iframe (i.e. array2
) is not recognized as an array when you use instanceof Array
. However, it is correctly identified as an array when using Array.isArray()
.
If you are interested in knowing why instanceof Array
doesn't work across different globals (i.e. iframe
or window
), you can read more about it on here.
Which of these two is the preferred solution?
In most cases instanceof Array
should be enough. However, since instanceof Array
doesn't work correctly across iframes
/window
, Array.isArray()
would be more robust solution.
Make sure to check for browser compatibility though. If you need to support IE 8 or less, Array.isArray()
won't work (see Mozilla's doc).
Which has a faster process time?
According to this jsperf, instanceof Array
is faster than Array.isArray()
. Which makes sense, because Array.isArray()
performs more robust checking and therefore takes a slight performance hit.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With