第一百零九章 遍历(迭代)

我们有了一个对象(流口水),现在想要输出它所有的属性,怎么做呢?

显然不能像数组那样了,毕竟没有序号,属性名也没什么规律,我们也没办法特别直接便捷的获取数组中属性的数量。

这里先讲一个简单常用的方法,嗯,方法是很多的,但是我们一次掌握那么多会很累,所以先学一个,用起来再说:

const he = {name: '诸葛大牛',age: 24,male: true,hobby: ['eat', 'sleep']}for(let key in he){console.log('Key is '+key+', and value is '+he[key]);}

这个 for 和我们前面的学的不太一样,这是 for……in…… 循环,让变量 key(你也可以随意取名字,反正就是一个新的变量,只在后面的大括号中起作用),逐个代替对象 he 中的属性名。那么 he[key] 自然就是对应的属性值了,注意,这里没用引号,因为 key 就是变量。

这个用两遍也就明白了,比以前的循环简单多了,贼爽!

那……贪心一点,数组能不能也这么方便的进行遍历呢?可以,但是方法有点区别。毕竟数组没有属性名,所以我们要用 for……of…… 方法。

const arr = [1, 2, 3, 4];for(let val of arr){console.log(val);}

这里变量 val 用来逐个替代数组中的每一项。

这两个方法很像,但是不能混用,这就不好记忆了。教给大家一个方法,首先学习两个单词,总是要用到的,Array 是数组,这个我前们面遇到过了,Object 是对象。这两个单词一个有 o,一个没有。为了公平,for……of…… 这个 o 多的就给 Array 用;而 for……in…… 则给那个自己带 o 的 Object 用,这样大家的 o 就一样多了。


来说一个细节,上面小括号里的 let 都可以换成 const,当然就成了不能修改的常量,不过一般来说,我们也不需要修改。

那么既然是循环,就可能执行多次,我们这不是对一个变量声明了很多次么,为什么没出错?

因为 let 和 const 的声明仅在自己所在的大括号内起作用,出了这个大括号,就没它什么事了。

就好像你们班有个班长,在你们班得到公认,一喊班长,全都知道是在叫他,这很好用。但是到了我们班,喊班长,出来就是的另外的人了,你们班的那个任命,作用不到我们班来。

在循环中,这个大括号是被反复执行的,但是每一遍都是“进入——执行所有代码——出来”的过程,所以虽然执行了多次,但每一次都是一个独立的大括号,虽然行为一样,但是互相并没有深刻的影响。

这里每一次声明的变量,也仅在那一次循环中的大括号里起作用,下一轮,又是一回事了。

教务处要找各班班长开会,让你去叫。于是你走到一班门口大喊:“班长出来,到教务处开会啦~”;到二班门口,还是这句话;三班门口……

但是没有冲突,因为每一次说的班长都是指你当前所在的这个班的班长。现在也一样,声明的变量名(就是个代号)都一样,但都是在那一轮里使用的代号。

原文链接:https://www.ek58.com/archives/3742,转载请注明出处。

0

评论0

请先

没有账号? 注册  忘记密码?