簡體   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