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