JavaScript中的instanceof()和Array.isArray()方法有什么区别?

Array.isArray()方法是通用的,它可以在任何地方运行,而instanceof运算符不是通用的,它不能在新环境中工作。

语法1

Array.isArray(array);

语法2

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