【发布时间】:2021-12-20 11:38:47
【问题描述】:
我正在制作一个简单的 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 次。有人可以解释这里发生了什么吗?
【问题讨论】:
-
这是因为你在循环中改变了
text的长度,而i < text.length % 8的表达式会随着每次迭代而改变。
标签: javascript for-loop modulo