day224-三种检测数组的方法

要点

  1. Object.prototype.toString.call()
  2. instanceof
  3. Array.isArray()、与instanceof比较

Object.prototype.toString.call()

所有的基本数据类型都能判断,其中就包括nullundefined

let arr = [1, 2]
// Object.prototype.toString.call()
arr.toString() // 1,2
Object.prototype.toString.call(arr) // [object Array]

instanceof

原理是判断__proto__是否能找到对应的prototypeA.__proto__ ? B.prototype

但是instanceof只能用来判断对象类型,原始类型不可以。原始类型即:Undefined,Null,Boolean,Number和 String。

Array.isArray()

ES5新增方法,用于确定传递的值是否是一个数组。

instanceof比较

  1. instanceof不支持跨iframes, 但是Array.isArray支持。
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
  1. instanceof要比Array.isArray更快,jsperf

参考

How to identify if a webpage is being loaded inside an iframe or directly into the browser window?

JavaScript 数据类型和数据结构

文章作者: lmislm
文章链接: http://lmislm.com/2019/08/26/2019-08-26/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 LMISLMのBlog