Array.isArray()方法是通用的,它可以在任何地方运行,而instanceof运算符不是通用的,它不能在新环境中工作。
Array.isArray(array);
array instance of Array;
在以下示例中,在未创建新环境的情况下,Array.isArrar()和instanceof 都产生了相同的输出。
<html> <body> <script> var a = [1,2,3,4,5]; document.write(Array.isArray(a)); document.write("</br>"); document.write((a instanceof Array)); document.write("</br>"); var b = {} document.write(Array.isArray(b)); document.write("</br>"); document.write((b instanceof Array)); </script> </body> </html>
输出结果
true true false false
现在,让我们尝试创建一个新的环境或新的框架,以检查instanceof 运算符是否在那里工作。
在下面的示例中,使用' iframe '(一个产生类似于对象的数组的frame属性)创建一个新框架。稍后,在该新框架中创建类似对象的数组,并通过这两个函数传递。由于instanceof 不是通用的,因此它认为框架数组不是实际的数组,并作为输出返回false , 而Array.isArray()返回true ,如输出所示。
<html> <body> <script> var iframeE = document.createElement('iframe'); iframeE.style.display = "none"; document.body.appendChild(iframeE); iframeArray = window.frames[window.frames.length - 1].Array; var a = new Array(1,2,3,"hi",4, "hello"); var b = new iframeArray(1,2,3,4); document.write(Array.isArray(a)); document.write("</br>"); document.write(a instanceof Array); document.write("</br>"); document.write(Array.isArray(b)); document.write("</br>"); document.write(b instanceof Array); </script> </body> </html>
输出结果
true true true false