携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第2天,点击查看活动详情
对象的属性
对象中的属性是key:value形式的,我们在调用这个属性的时候可以通过 obj.key的形式调用,也可以通过obj[key]的形式调用,在ES6中,我们甚至可以动态调用对象的属性,如可以以以下形式调用
let obj = {
name: "Hans",
FridayNight: "周五晚上",
MondayMorning: "周一早上"
}
let day = "Friday"
let time = "Night"
obj[day+time] // "周五晚上"
以这样的方式调用对象的属性是不是方便了许多呢。而且 [key] 用方括号来调用对象属性还有一个功能,就是对象中的属性key的命名是带有特殊符号的如 ‘-’ ‘_’这种,使用 obj.key来调用就会报错了,因为js不识别这种调用方式,可以通过 obj[”key-key”]的方式来正常调用
遍历
对象的属性怎么遍历,for in 遍历 ,for of 也是一种遍历方式,但是for of 只支持数组,因为数组中有迭代器,而对象中没有迭代器,对象中为什么没有迭代器,是以为对象中的不确定性因素太多了,对象的属性不像数组中的元素那么简单,index为0的元素,index为1的元素,对象中的属性要配置迭代器就需要考虑这几种情况
- property的来源:是ownproperty还是加原型链上的,
- key的类型,是string类型的还是包括symbol类型的
- property的[[Enumberable]] :是可枚举的还是不可枚举的
考虑这些不确定性的因素,让对象配置迭代器显然不合理。
for in 循环可以用来遍历对象的可枚举属性列表,包括Prototype链,但是如何遍历属性的值呢
ES5提供了一些数组的辅助迭代器,包括forEach()、every()和some(),每种迭代方式都可以接受一个回调函数,并将它应用到数组的元素上,唯一的区别就是处理方式不一样,forEach会遍历所有的值,并忽略返回值,every 将所有元素执行返回值为true时返回true,也可以说执行到第一个返回值为flase时返回。some 当有一个元素执行完返回值为true返回true,也可以说执行到第一个返回true的回调函数时停止
ES6 中增加了 for of循环语法,
var myArray = [ 1, 2, 3 ];
for (var v of myArray) {
console.log( v );
}
// 1
// 2
// 3
for of 会向被访问的对象请求一个迭代器对象,然后通过迭代器对象的next()方法来遍历所有返回值。数组中有内置的@@iterator,因此for of 可以直接被应用到数组上。