[英]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.