码迷,mamicode.com
首页 > 其他好文 > 详细

2021.06.15(遍历for-in与for-of的区别)

时间:2021-06-16 18:08:46      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:ring   size   res   ble   arguments   object   函数   item   result   

 

const obj = {
        a: 1,
        b: 2,
        c: 3
    }
    for (let i in obj) {
        console.log(i)
        // a
        // b
        // c
    }
    for (let i of obj) {
        console.log(i)
        // Uncaught TypeError: obj is not iterable 报错了
    }

 

以上代码通过 for in 和 for of 对一个obj对象进行遍历,for in 正常的获取了对象的 key值,分别打印 a、b、c,而 for of却报错了。

for~in语句用于遍历对象,而for~of语句用于遍历数组,但这不是必须的,只是这样操作比较方便。

 

1.遍历数组

For-in循环

 

    var arr=[1,2,3,4,5,6,7] //申明一个数组
    for(var x in arr){
        document.write("arr["+x+"]="+arr[x] + " "); //x为数组的下标
    }

 

 For-of循环

    var arr=[1,2,3,4,5,6,7] //申明一个数组
    for(var value of arr){
        document.write(value + " ");//value为数组的元素,比For-in访问数组操作简单
    }

 2.遍历对象

For-in循环

var obj={name:‘lilin‘,age:24,sex:‘man‘} //申明一个对象
for(var x in obj){
   document.write(x+"="+obj[x] + " ");//x为对象属性名,obj[x]为该属性的值
}

For-of循环

var obj={name:‘lilin‘,age:24,sex:‘man‘} //申明一个对象
for(var x of Object.keys(obj)){
    document.write(x+"="+obj[x]+" ");//x为对象属性名,obj[x]为该属性的值
}

注意:for~in和for~of遍历对象时,实质是遍历对象的数组形式,所以访问对象的属性值时,必须使用“对象名[属性名]”的格式。

<script src="js/jquery-1.11.0.min.js"></script>
        <script type="text/javascript">
            var obj = {
                name: ‘lilin‘,
                age: 24,
                sex: ‘man‘
            } //申明一个对象
            for(var x of Object.keys(obj)) {
                document.write(x + "=" + obj[x] + ","); //x为对象属性名,obj[x]为该属性的值
                console.log(x + "=", obj[x]);
            }
        </script>

result:name=lilin,age=24,sex=man,

 

一句话概括:for in是遍历(object)键名,for of是遍历(array)键值。

 

for...in

for...in 循环只遍历可枚举属性(包括它的原型链上的可枚举属性)。像 Array和Object使用内置构造函数所创建的对象都会继承自Object.prototype和String.prototype的不可枚举属性,例如 String 的 indexOf() 方法或 Object的toString()方法。循环将遍历对象本身的所有可枚举属性,以及对象从其构造函数原型中继承的属性(更接近原型链中对象的属性覆盖原型属性)。

 

var obj = {a:1, b:2, c:3};
    
for (let key in obj) {
  console.log(key);
}
 
// a
// b
// c

 

for...of

for...of语句在可迭代对象(包括Array,Map,Set,String,TypedArray,arguments 对象等等)上创建一个迭代循环,调用自定义迭代钩子,并为每个不同属性的值执行语句

    const array1 = [‘a‘, ‘b‘, ‘c‘];
     
    for (const val of array1) {
      console.log(val);
    }
     
    // a
    // b
    // c

for of不可以遍历普通对象,想要遍历对象的属性,可以用for in循环, 或内建的Object.keys()方法

 

 

Object.prototype.objCustom = function() {}; 
Array.prototype.arrCustom = function() {};
 
let iterable = [3, 5, 7];
iterable.foo = ‘hello‘;
 
for (let i in iterable) {
  console.log(i); // 0, 1, 2, "foo", "arrCustom", "objCustom"
}
 
for (let i in iterable) {
  if (iterable.hasOwnProperty(i)) {
    console.log(i); // 0, 1, 2, "foo"
  }
}
 
for (let i of iterable) {
  console.log(i); // logs 3, 5, 7
}

 

2021-06-16   10:08:27

 

2021.06.15(遍历for-in与for-of的区别)

标签:ring   size   res   ble   arguments   object   函数   item   result   

原文地址:https://www.cnblogs.com/zhenggc99/p/14888256.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!