es6判断数组是否包含某个元素,es6判断两个数组中的值是否相同

  es6判断数组是否包含某个元素,es6判断两个数组中的值是否相同

  本教程运行环境:windows7系统,ECMAScript版本6,Dell G3电脑。

  在ES5中判断变量是否为数组

  在ES5中,我们至少有以下五种方法来判断一个值是否是数组:

  var a=[];

  //1.基于实例of

  数组的实例;

  //2.基于构造函数

  a .构造函数===数组;

  //3.基于Object.prototype.isPrototypeOf

  array . prototype . isprototypeof(a);

  //4.基于getPrototypeOf

  object . getprototypeof(a)===array . prototype;

  //5.基于Object.prototype.toString

  object . prototype . tostring . apply(a)===[对象数组];以上,除了Object.prototype.toString,其他方法都无法正确判断变量的类型。

  要知道,代码的运行环境是非常复杂的,一个变量可能会想尽办法迷惑它的创建者。你看。

  var a={

  __proto__: Array.prototype

  };

  //分别在控制台中测试运行以下代码

  //1.基于实例of

  数组的实例;//=真

  //2.基于构造函数

  a .构造函数===数组;//=真

  //3.基于Object.prototype.isPrototypeOf

  array . prototype . isprototypeof(a);//=真

  //4.基于getPrototypeOf

  object . getprototypeof(a)===array . prototype;//=高于true,所有4个方法都将返回true。为什么?我们只是手动将一个对象的__proto__属性指定为Array.prototype,这导致该对象继承了Array对象。这种不负责任的继承方式,让基于继承的判决方案瞬间土崩瓦解。

  不仅如此,我们还知道Array是堆数据,变量只指向它的引用地址,所以每个页面的Array对象引用的地址是不一样的。iframe中声明的数组,其构造函数是iframe中的Array对象。如果在iframe中声明一个数组X,并将其赋给父页面的变量Y,那么在父页面中使用y instanceof Array必然导致false。最后一个返回一个字符串,所以不存在引用问题。事实上,多个页面或系统之间的交互只能通过字符串才能畅通无阻。

  在ES6中判断变量是否为数组

  鉴于数组的常用,在ES6中加入了Array.isArray方法。使用此方法确定变量是否为数组非常简单,如下所示:

  array . isarray([]);//=真

  Array.isArray({0: a ,长度:1 });//=false其实通过Object.prototype.toString判断一个值的类型也是各大主流库的标准。因此,Array.isArray的polyfill通常如下所示:

  如果(!Array.isArray){

  Array.isArray=function(arg){

  return object . prototype . tostring . call(arg)==[对象数组];

  };

  }【相关推荐:javascript视频教程,web前端】以上是es6如何判断变量是否为数组的细节。更多请关注我们的其他相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: