gpt4 book ai didi

javascript - For-Of 循环与 For 循环

转载 作者:行者123 更新时间:2023-12-05 00:35:39 25 4
gpt4 key购买 nike

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

有哪些用例会让人选择其中一个?

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

示例

Complete the solution so that the function will break up camel casing, using a space between words.


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

如果还有任何其他示例/实例也很好。

最佳答案

有点后知后觉来解释你的问题:

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

person[name] = 'Tom'
person是对象, name key 和 'Tom'对应的值。

数组使用索引(即数字)作为键:
array[5] = 10

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

让我们从传统的 开始for 循环 :
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作为 关键 访问数组

现在这一切都非常强大和漂亮,但每次都编写起来很麻烦,尤其是在大多数情况下,您只想遍历数组。但幸运的是,我们有 for-in:

换入 会找回你所有的 key 你已经确定了自己。使用数组,您可以使用它来实现与上述相同的结果
for(let i in array) {...}

但是请注意,for-in 不仅会为您提供数组中的数字键。它也适用于您在任何对象上设置的其他键:
let object = {
key1 : 'value',
key2 : 'value'
}

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

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

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

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

对于 for-in 循环的优秀资源,我推荐 Mozilla Developer Network

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

对于循环在语法上(即您编写它们的方式)与 for-in 循环非常相似:
for(let v of array) {...}

然而,一方面,他们只会在所谓的 上工作。可迭代 对象(数组是可迭代的)。其次,您只会得到 .他们不再会给你任何 key !
let array = ['a', 'b', 'c']
for(let v of array) {
console.log(v)
}

日志 'a' , 'b''c' .您将不再知道这些值有什么键!

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

关于 for-in 循环以及 iterable 实际含义的更多信息,我再次推荐 MDN

关于javascript - For-Of 循环与 For 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60924958/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com