标签: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却报错了。
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语句在可迭代对象(包括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