我正在制作一個簡單的 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. 有人可以解釋這里發生了什么嗎?
uj5u.com熱心網友回復:
for 回圈將在每次運行回圈時評估文本的長度。因此,如果您在回圈中的文本末尾添加一個主題標簽,當它再次評估長度時,它會看到文本比上次長一個。
所以基本上你是在添加文本而不是再次找到長度,當你在 for 回圈之外得到文本的長度時,你將得到一個長度常量并且能夠在 for 回圈中準確地使用它。
舉個例子,當你做恒定長度時,就像你在 for 回圈之外的第一個例子中所做的那樣,你有一個等式:
repeat until x = y
但是如果你在 for 回圈內進行計算,你會得到一個等式:
repeat until x = x 1
這是行不通的,因為如果每次增加 x 時都重新計算 x 1 是什么,x 不會等于自身 1。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/352910.html
標籤:javascript for循环 模数
上一篇:auto&i范圍的正確用法?
