for...in...
用于遍历对象的可枚举属性。它会迭代对象中的每个属性,并且会迭代原型链上的属性。可枚举是用来描述对象的属性是否可以通过遍历枚举出来的特性。如果一个属性被标记为可枚举,那么它可以在某些操作中被遍历或迭代到。
默认情况下,通过一般方式或 new Object() 创建的对象的属性都是可枚举的,但是,通过某些内置对象的原型或使用 Object.defineProperty() 方法可以将属性定义为不可枚举。
当使用 for...in 循环或 Object.keys() 方法遍历对象时,只会迭代对象中的可枚举属性。
如果只想遍历对象自身的属性,可以使用 Object.hasOwnProperty() 进行过滤。Object.hasOwnProperty() 是 JavaScript 中的一个对象方法,用于检查对象是否具有指定的属性,它返回一个布尔值。(不包括原型链上的属性)。
for...of...
用于遍历可迭代对象,如数组、字符串等。它会迭代对象中的每个元素并执行相应的操作。可迭代就是可以按照一定顺序逐个访问其中的元素,比如数组的下标值。