let cart = ['iPhone', 'iMac', 'iPad'];
首先我们先声明一个数组,如果我们在这个数组后面用.keys()方法的话,他的返回的第一个值value就代表索引号,第二个值就代表是否迭代完成,若done显示false就表示后面还有数据。
let keys = cart.keys(); console.log(keys.next()); //{value: 0, done: false} console.log(keys.next()); //{value: 1, done: false} console.log(keys.next()); //{value: 2, done: false} console.log(keys.next()); //{value: undefined, done: true}此时我们也可以用对象解构的方式得到keys返回的值
let keys = cart.keys(); let {value, done} = keys.next(); console.log(value, done); //0 false同理,除了在数组后面用.keys()之外,我们也可以通过.value()的方式得到迭代的结果。
let values = cart.values(); let {value, done} = values.next(); console.log(value, done); //iPhone false,keys()与.values()的不同就是前者是获取索引值,而后者则是获取值。
其实在我们系统中,我们经常用的for of就是专门用来操作迭代对象的
for (const value of cart.values()) { console.log(value) }for of 的实现原理就是把数组中.values()返回的值的value属性赋值给我们for循环中声明的value,从而实现数组的迭代。
如果此时我们把values改为keys,则返回的就是索引值
for (const keys of cart.keys()) { console.log(keys) }以上则是.keys()跟.values()之间的区别。除此之外,系统还给我们提供了entries()迭代对象。
let entries = cart.entries(); console.log(entries.next());此时我们打印一下entries,得到的value属性将会以数组的形式返回出来,该数组的第一个值为索引号,第二个值为value值。
说白了,entries()可以理解为是.keys()和.values()的结合。
