你理解了for-in 和 for-of 吗?他们有什么区别?

这篇具有很好参考价值的文章主要介绍了你理解了for-in 和 for-of 吗?他们有什么区别?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【前言】

在 JavaScript 中,for 循环语句是编写复杂程序时经常使用的一种工具。其中,for-in 和 for-of 是两个最常用的变体。尽管这两者非常相似,但它们在迭代对象方面有所不同。在本文中,我们将探讨 for-in 和 for-of 的不同之处,以及如何正确使用它们。

【正文】

一、for-in 循环

for-in 循环是一种迭代对象属性的方法。它可以用于遍历对象中的所有可枚举属性,包括从原型链继承的属性。通常,我们使用 for-in 循环来遍历对象的键名。

下面是一个简单的例子:

const person = {
  name: 'John',
  age: 30,
  gender: 'male'
};

for (const key in person) {
  console.log(key, person[key]);
}

在这个例子中,我们使用 for-in 循环遍历了 person 对象的所有键名。输出结果如下:

name John
age 30
gender male

需要注意的是,for-in 循环并不是按照对象属性在对象中的顺序迭代的。这是因为 JavaScript 中的对象属性没有固定的顺序。因此,我们在使用 for-in 循环迭代对象时,不能保证它们的顺序。

另外,由于 for-in 循环会遍历对象的原型链,因此可能会迭代到不是自身属性的属性。为了避免这种情况,我们可以使用 hasOwnProperty 方法来检查属性是否为对象自身的属性。

下面是一个使用 hasOwnProperty 的例子:

const person = {
  name: 'John',
  age: 30,
  gender: 'male'
};

for (const key in person) {
  if (person.hasOwnProperty(key)) {
    console.log(key, person[key]);
  }
}

在这个例子中,我们使用 hasOwnProperty 方法来检查属性是否为 person 对象自身的属性。输出结果与之前相同。

二、for-of 循环

for-of 循环是一种迭代可迭代对象的方法。它可以用于遍历数组、字符串、Map、Set、TypedArray 等可迭代对象。通常,我们使用 for-of 循环来遍历数组或字符串的值。

下面是一个简单的例子:

const arr = [1, 2, 3];

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

在这个例子中,我们使用 for-of 循环遍历了数组 arr 的所有值。输出结果如下:

1
2
3

需要注意的是,for-of 循环不适用于迭代对象属性。如果我们尝试使用 for-of 循环迭代对象,将会抛出 TypeError 异常。

下面是一个尝试使用 for-of 循环迭代对象的例子:


const person = {
  name: 'John',
  age: 30,
  gender: 'male'
};

for (const value of person) {
  console.log(value);
}


在这个例子中,我们尝试使用 for-of 循环迭代对象 person,但会抛出 TypeError 异常。

三、for-in 和 for-of 的区别

for-in 循环和 for-of 循环虽然都是用于迭代对象的方法,但它们有一些不同之处。

1. 迭代对象的内容不同

for-in 循环迭代对象的是键名,而 for-of 循环迭代对象的是值。因此,for-in 循环适用于迭代对象的键名,而 for-of 循环适用于迭代对象的值。

2. 迭代对象的类型不同

for-in 循环适用于遍历对象,包括普通对象、数组、函数等,而 for-of 循环适用于遍历可迭代对象,包括数组、字符串、Map、Set、TypedArray 等。

3. 迭代对象的顺序不同

for-in 循环的迭代顺序是不确定的,因为对象的属性没有固定的顺序。而 for-of 循环的迭代顺序是确定的,因为可迭代对象的值是按照一定顺序排列的。

4. 迭代对象的原理不同

for-in 循环遍历对象时,会遍历对象的原型链,并且会包含从原型链继承的属性。而 for-of 循环遍历的对象是可迭代对象,它们的值是可枚举的。

四、如何选择合适的循环方法

在选择使用 for-in 循环还是 for-of 循环时,我们需要考虑对象的类型以及我们需要迭代的内容。通常,如果我们需要迭代对象的键名,我们可以使用 for-in 循环;如果我们需要迭代对象的值,我们可以使用 for-of 循环。

另外,当我们需要遍历数组或字符串时,我们可以使用 for-of 循环,因为它可以提供更好的性能和可读性。相比之下,for-in 循环会遍历对象的原型链,会导致性能下降。

如果我们需要遍历一个对象,同时又需要过滤掉从原型链继承的属性,我们可以使用 hasOwnProperty 方法进行过滤。例如:

const person = {
  name: 'John',
  age: 30,
  gender: 'male'
};

for (const key in person) {
  if (person.hasOwnProperty(key)) {
    console.log(key, person[key]);
  }
}


五、总结

for-in 循环和 for-of 循环是 JavaScript 中用于迭代对象的两种方法。它们的区别在于迭代对象的内容、类型、顺序和原理。通常,我们应该根据需要选择合适的循环方法,以提高效的迭代对象。

同时,我们也需要注意到 for-in 循环的一些缺陷。由于它会遍历对象的原型链,导致性能下降,而且不能保证迭代顺序,所以我们应该避免在数组和字符串上使用 for-in 循环。

最后,我们还可以使用其他一些方法来迭代对象,例如 forEach 方法、map 方法、reduce 方法等。这些方法不仅可以提供更好的性能和可读性,还可以通过回调函数来实现更加灵活的操作。

总的来说,for-in 循环和 for-of 循环都是 JavaScript 中用于迭代对象的重要方法。我们需要根据对象的类型和需要迭代的内容来选择合适的循环方法,以提高代码的性能和可读性。同时,我们也需要注意 for-in 循环的缺陷,并且学会使用其他方法来迭代对象,以实现更加灵活和高效的操作。文章来源地址https://www.toymoban.com/news/detail-697654.html

到了这里,关于你理解了for-in 和 for-of 吗?他们有什么区别?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • js for循环与for in循环 for of循环的区别

    JavaScript中,for循环、for...in循环和for...of循环是用于迭代数组或对象属性的不同方式。 for循环: for循环是最常见的迭代方法,它允许你指定迭代的起始点、结束条件和每次迭代后的操作。它可以用于迭代数组和字符串。 例如,遍历一个数组可以使用for循环的语法: for...in循

    2024年01月20日
    浏览(44)
  • Less、Sass/Scss是什么?他们有什么区别?

    是一种动态样式语言. 对CSS赋予了动态语言的特性,如变量、继承、运算、函数。 Less 既可以在客户端上运行 (支持IE 6+, Webkit, Firefox),也可在服务端运行。 是一种动态样式语言,Sass语法属于缩排语法, 比css比多出好些功能(如变量、嵌套、运算,混入(Mixin)、继承、颜色处理,

    2023年04月22日
    浏览(60)
  • SpringBoot 和 SpringCloud 有什么区别,一起来学习了解他们

    Spring Boot和Spring Cloud是两个非常流行的Java开发框架,它们都是由Spring Framework开发的,但是它们的定位和功能有所不同。本文将介绍Spring Boot和Spring Cloud的区别。 Spring Boot是一个轻量级的应用程序框架,它的目的是使Spring应用程序的开发变得更加快速和容易。Spring Boot通过自动

    2024年02月14日
    浏览(26)
  • 关于分贝(dB)单位的解释(理解),关于dB增益是什么意思,他们放大了多少倍?为何他们的计算公式不一样。

    dB是一个数据存储单位,也是量度两个相同单位之数量比例的 计量单位 ,主要用于度量声音强度,这里主要说一下计量单位的理解和声强的度量。 一,什么是分贝 分贝是较常用的计量单位。可表示为: 1. 表示功率量之比的一种单位,等于功率强度之比的常用 对数 的10倍。

    2024年02月07日
    浏览(39)
  • 小程序(uniapp)页面的跳转方式有哪些,他们之间的区别是什么?

    1、uni.navigateTo: 保留当前页面,跳转到应用的某个页面,使用 uni.navigateBack 可以返回原页面。这种方式类似于网页的超链接跳转。 2、uni.redirectTo: 关闭当前页面,跳转大应用内的某个页面。这种方式类似于网页的重定向。 3、uni.switchTab: 跳转到tabBar页面,并关闭其他所有非ta

    2024年02月11日
    浏览(31)
  • JS中的for in和for of

    在JavaScript中, for...in 和 for...of 都是用于迭代循环的结构:   1. for...in 循环: for...in 循环主要用于遍历对象的可枚举属性。这种循环不仅遍历对象自身的属性,还会遍历原型链上的可枚举属性。它的语法如下: 其中 variable 是属性名, object 是要遍历的对象。 注意:虽然 f

    2023年04月20日
    浏览(44)
  • 数组的5种遍历(for循环、for...in、for...of、forEach()、map()

    数组:内存中一块连续的存储单元,这些存储单元具有共同的名称,不同的索引(下标)。 数组5种遍历: 1、for循环        任何数组都可以使用for循环进行遍历,使用频率最高                                 for (let i = 0; i arr.length; i++) {                            

    2024年02月06日
    浏览(34)
  • 无涯教程-Javascript - For...in循环语句

    for ... in 循环用于循环访问对象的属性,由于无涯教程尚未讨论 Objects 对象,您就会发现此循环非常有用。 “ for...in”循环的语法为: 在每次迭代中,将 object 对象中的一个属性分配给 variablename 变量,此循环一直进行到对象的所有属性。 请尝试以下示例来实现\\\" for-in\\\"循环,它

    2024年02月16日
    浏览(31)
  • Accurate 3D Prediction of Missing Teeth in Diverse Patterns for Precise Dental Implant Planning

    近年来,由于种植体的高成功率和美观优势,对种植体的需求激增。 然而,由于牙齿结构的复杂性和牙齿脱落模式的可变性,准确预测缺失牙齿的精确数字种植计划仍然是一个挑战。本研究提出了一种新的框架,用于准确预测不同模式的缺牙,促进数字化种植计划。提出的框

    2024年01月23日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包