我们有了一个对象(流口水),现在想要输出它所有的属性,怎么做呢?
显然不能像数组那样了,毕竟没有序号,属性名也没什么规律,我们也没办法特别直接便捷的获取数组中属性的数量。
这里先讲一个简单常用的方法,嗯,方法是很多的,但是我们一次掌握那么多会很累,所以先学一个,用起来再说:
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
的声明仅在自己所在的大括号内起作用,出了这个大括号,就没它什么事了。
就好像你们班有个班长,在你们班得到公认,一喊班长,全都知道是在叫他,这很好用。但是到了我们班,喊班长,出来就是的另外的人了,你们班的那个任命,作用不到我们班来。
在循环中,这个大括号是被反复执行的,但是每一遍都是“进入——执行所有代码——出来”的过程,所以虽然执行了多次,但每一次都是一个独立的大括号,虽然行为一样,但是互相并没有深刻的影响。
这里每一次声明的变量,也仅在那一次循环中的大括号里起作用,下一轮,又是一回事了。
教务处要找各班班长开会,让你去叫。于是你走到一班门口大喊:“班长出来,到教务处开会啦~”;到二班门口,还是这句话;三班门口……
但是没有冲突,因为每一次说的班长都是指你当前所在的这个班的班长。现在也一样,声明的变量名(就是个代号)都一样,但都是在那一轮里使用的代号。
暂无评论内容