For-Of 循环与 For 循环

2024-04-28

这两者是相同的还是可以互换的?

在哪些用例中,人们会选择其中一种而不是另一种?

for(let i of array){some code}
for(let i = 0; i < array.length; i++){some code}

EXAMPLE

完成该解决方案,以便该函数将使用单词之间的空格来分解驼峰式大小写。

solution("camelCasing") == "camel Casing"

如果我们使用这个例子,除了性能优势(如果有的话)之外,为什么有人会使用一个循环而不是另一个循环?

如果有任何其他示例/实例,那就太好了。


一些背景知识来解释你的问题:

在 Javascript 中,对象(其中包括数组)将属性存储在核心价值对。这意味着每个分配的值都有一个键(属性名称)来访问它。 例如在

person[name] = 'Tom'

person是对象,name钥匙和'Tom'相应的值。

数组使用索引(即数字)作为键:

array[5] = 10

现在,请在以下解释中记住这一点。

我们先从传统的for loop:

for(let i = 0; i < array.length; i++) {...}

这种遍历数组的方法是最古老的方法(只要您不使用 while 循环) 您将在几乎任何(命令式)编程语言中找到编写 for 循环的相应方法。您会注意到,它的工作方式非常明确。例如。你可以改变中断条件 i < array.length到其他事情(例如i < array.length-1用于跳过最后一个位置),或步骤i++(例如,到i+=2),或从不同的索引开始(例如let i = 5)。如果需要,您可以向后而不是向前迭代数组。几乎任何你可以在另一个 for 循环中完成的事情,你也可以在这种类型中完成,如果你知道如何做的话。

括号内{...}然后你可以使用i as a key访问数组values

现在这一切都非常强大和美好,但每次编写都会变得很麻烦,特别是在大多数情况下您只想迭代数组时。但幸运的是我们有 for-in:

For-in会找回你所有的keys你已经设定了自己。对于数组,您可以使用它来实现与上面相同的结果

for(let i in array) {...}

但请注意,for-in 不仅会为您提供数组中的数字键。它也适用于您在任何对象上设置的其他键:

let object = {
    key1 : 'value',
    key2 : 'value'
}

for(let i in object) {
    console.log(i)
}

将注销'key1' and 'key2'(是的,这里的键也是字符串)。

有关它将为您提供哪些键的更准确描述,请查看下面的链接。

什么时候用for-in?每当您想要为数组的每个元素/(几乎)对象的每个属性调用一次代码时。例如。当你想将数组中的所有值加 1 时。 什么时候不应该使用 for-in?如果您需要更精细地控制遍历数组的顺序,或者您不想命中数组的所有元素,而只想每秒/第三次,请不要使用它。

我推荐有关 for-in 循环的优秀资源Mozilla 开发者网络 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in

那么,什么是 for-of 循​​环呢?

For-of循环在语法上(即编写它们的方式)与 for-in 循环非常相似:

for(let v of array) {...}

然而,一方面,他们只会在所谓的iterable对象(数组是可迭代的)。其次,你只得到values。他们不会再给你任何钥匙了!

let array = ['a', 'b', 'c']
for(let v of array) {
    console.log(v)
}

logs 'a', 'b' and 'c'。您将不再知道这些值有什么键!

那么,什么时候使用这些呢?每次你只需要值而不关心键。例如。如果您只想打印值。 什么时候不使用它们?如果你想交换数组的元素,如果你想颠倒顺序。您甚至无法将值加 1 并将它们存储回数组中,因为为此,您需要知道它们对应的键。

有关 for-in 循环以及 iterable 实际含义的更多信息,我再次推荐MDN https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...of

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

For-Of 循环与 For 循环 的相关文章

随机推荐