JS----(in /for in/forEach /for of)

for in/ for of

for…in循环会遍历一个object所有的可枚举属性。
for…of会遍历具有iterator接口的数据结构。

for…in 遍历(当前对象及其原型上的)每一个属性名称,到对像的key或数组,字符串的下标
for…of遍历(当前对象上的)每一个属性值。

原生具备 Iterator 接口的数据结构如下:

 Array   
 Map 
 Set 
 String
 TypedArray
 函数的arguments对象 
 NodeList对象

in
参考学习:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/in
指定的属性在指定的对象或其原型链中,则in 运算符返回true。
(prop in object)
prop:一个字符串类型或者 symbol 类型的属性名或者数组索引(非symbol类型将会强制转为字符串)。

如果你使用 delete 运算符删除了一个属性,则 in 运算符对所删除属性返回 false。
如果你只是将一个属性的值赋值为undefined,而没有删除它,则 in 运算仍然会返回true。

继承属性:
如果一个属性是从原型链上继承来的,in 运算符也会返回 true。
“toString” in {}; // 返回true
for in
for in的写法:

var wq = {
  age:20,
  name:"咸鱼",
  sex:"男"
}
 
for(var attr in wq){//attr是属性,attr可以换成任意变量名
  console.log(attr);//  输出的是 属性名:age  name  sex
  console.log(wq[attr]);//属性相对应的值  20  咸鱼  男
}

forEach
forEach() 方法用于调用数组的每个元素,并将元素传递给回调函数。
array.forEach(function(currentValue, index, arr), thisValue)

currentValue 必需。
当前元素 index 可选。当前元素的索引值。
arr 可选。当前元素所属的数组对象。

for in也可以遍历数组,但是会存在以下几个问题。

1、index索引为字符串型数字,不能直接进行几何运算

2、遍历顺序有可能不是按照实际数组的内部顺序

3、使用for in会遍历数组所有的可枚举属性,包括原型。例如上栗的原型方法method和name属性

遍历普通数组的话,用for是最好的选择,但是如果是对象,就for in就好了。

posted @ 2019-05-03 10:19  princeness  阅读(95)  评论(0编辑  收藏  举报