从数组的方法挖到了一个新玩意儿

整理数组的内容接近尾声,先把到ES5之前的做一个表格似的整理:

接着在迭代方法中,整理出一种新的方法:entries() 方法。这种方法是在ECMA-262第六版中提出了草案,进行了最初的定义。在EcmaScript 2017 也就是传说中的ES8作为新语法出现了。

它的返回一个新数组的迭代器对象包含数组中的每个索引的键值对。兼容性:pc端IE不兼容,手机端可兼容

举个例子:

vararr= ['a','b','c'];

varnewArr=arr.entries();

console.log(newArr);

//返回一个访问器Iterator{}

console.log(newArr.next());

//[0, "a"]

console.log(newArr.next());

//[1, "b"]

在这个例子中虽然我们看到了结果,但发现了一个jquery的方法.next()。其实,这并不是jquery的方法,并不是。

它是js的方法,在之前我们并没有学过这种方法。那么这种方法是做什么用的呢?

看下面:

在Java集合中有一种集合叫set集合,那么什么又是集合呢?Java中,数组在定义的时候是有长度限制的,少于这个长度则浪费内存,而多余这个长度又放不下,所以出现了“集合”。集合我们可以把它理解为一个可变长数组,可以在后期时进行拓展。这种集合遍历的时候有一种方法也是.next(),这个.next()方法的返回值是true或false,返回true是代表后面还有元素,而fales则代表后面没有元素了。

回到正题,说一下next方法的前世今生:

next()方法是,Generator(生成器)函数的一种方法。Generator 函数有多种理解角度。从语法上,可以把它理解成一个生成器,封装了多个内部状态。

next()返回两属性和值的对象。还可以向下一个方法提供一个参数,以便将值发送给生成器。

可以简单理解为,它会在一个对象中逐一寻找,返回一个对象,包含一个键值对。返回值的两个对象元素为Object { value: 1, done: false }。value键值代表值,值为第一个找到的对象值,done返回false代表后面还有对象元素可以继续寻找,如果返回true则代表后面没有对象元素了。但IE不兼容。

和Java不同的是done的返回值,没有元素时返回true,而还有可遍历的元素返回false

function*fn() {

yield1;

yield2;

yield3;

}

varfun=fn();// "Generator { }"

fun.next();

//"Object { value: 1, done: false }"

fun.next();

//"Object { value: 2, done: false }"

fun.next();

//"Object { value: 3, done: false }"

fun.next();

//"Object { value: undefined, done: true }"

说了这么多,其实有时候从一个方法深挖下去的时候,还是会发现跟对关联的方法的,树根一样越挖越多。不过还是很有意思的~

本微信号所有内容为前端客用户原创,前端客已获得独家授权,欢迎分享。

如有转载需求请留言征询,对于未经许可私自篡改内容、转载的行为我们保留追究维权的合法权利!

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180126G0IFII00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券