繁体   English   中英

为什么模运算符在 javscript 的 FOR 循环中的工作方式不同?

[英]Why does the modulo operator appear to work differently in FOR loops in javscript?

我正在制作一个简单的 javascript 函数,它接受一个字符串的输入并将其填充到最接近的 8 的倍数。该函数可以工作,但是似乎模运算符在 for 循环中的工作方式有所不同。 例如:

var text = "abcdefghi"
if(text.length % 8 !== 0){
  var amt = 8 - (text.length % 8)
  for (let i = 0; i < amt; i++) {
    text = text + "#"
  } 
}
console.log(text)

返回: abcdefghi#######

但:

var text = "abcdefghi"
if(text.length % 8 !== 0){
  for (let i = 0; i < text.length % 8; i++) {
    text = text + "#"
  }
}
console.log(text)

还返回: abcdefghi#######

根据我对模运算符text.length % 8 = 1理解,给定 9 个字符的字符串输入。 因此,为了填充字符串以使其成为 16 个字符,我必须执行8 - (text.length % 8) = 7 当我将它放入它自己的变量中时, amt = 7 for 循环循环 7 次并正常工作。 但是,当我在 for 循环中执行操作并删除8 -即使text.length % 8 = 1它也会循环 7 次。 有人可以解释这里发生了什么吗?

for 循环将在每次运行循环时评估文本的长度。 因此,如果您在循环中的文本末尾添加一个主题标签,当它再次评估长度时,它会看到文本比上次长一个。

所以基本上你是在添加文本而不是再次找到长度,当你在 for 循环之外得到文本的长度时,你将得到一个长度常量,并且能够在 for 循环中准确地使用它。

举个例子,当你做恒定长度时,就像你在 for 循环之外的第一个例子中所做的那样,你有一个等式:

repeat until x = y

但是如果你在 for 循环中进行计算,你会得到一个等式:

repeat until x = x + 1

这是行不通的,因为如果每次增加 x 时都重新计算 x + 1 是什么,x 不会等于自身 + 1。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM