for...of 与 for...in

一. 请问,以下打印出什么东西?


const obj = {
  name: "Maning",
  age: "secret",
  hobby: "reading",
};

const arr = [
  { name: "XXX", age: "11", hobby: "singing" },
  { name: "YYY", age: "22", hobby: "dancing" },
];

for (const i in obj) {
  console.log(i);
}

for (const i in arr) {
  console.log(i);
}

for (const i of arr) {
  console.log(i);
}

for (const i of obj) {
  console.log(i);
}

反正,我第一眼看到的时候,我在想这不都一样吗?然后细细一看,是 in 和 of 不一样,还有 obj 和 arr 不一样。

直接上答案吧!

// for...in(obj)
name
age
hobby

// for...in(arr)
o
1

// for...of(obj)
TypeError: obj is not iterable

// for...of(arr)
{ name: 'XXX', age: '11', hobby: 'singing' }
{ name: 'YYY', age: '22', hobby: 'dancing' }






2. 为啥呢?


这里我直接上官方文档的解释吧;真的写的太精准太好了,导致我复制过来以后,都不想再解释一遍。自己品吧;

for...in语句以任意顺序遍历一个对象的除Symbol以外的可枚举属性,包括继承的可枚举属性。

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言:在用for-in循环对象属性操作的时候,原意是操作对象中属性,但是实际遍历到原型链的方法,导致报错。之前只是...
    周末不敲键盘阅读 802评论 0 3
  • 本想就针对for..of看下,结果拔出萝卜带出泥,ES6相关扯出一大堆,感觉有必要记录。 1、for...of只会...
    火锅伯南克阅读 681评论 0 0
  • 包装类 如果尝试着把原始类型(number、string、boolean)当做对象使用,JS会自动将其转换为对应包...
    __拼搏__阅读 287评论 0 1
  • 数组是我们使用十分频繁的一种数据类型,是否能够熟练掌握数组的高级方法,将会直接影响我们的工作效率。在开始本文之前,...
    Jason杰森阅读 552评论 0 0
  • 国外某网站给出了44道JS难题,试着做了下,只做对了17道。这些题涉及面非常广,涵盖JS原型、函数细节、强制转换、...
    康斌阅读 7,249评论 9 51