[英]Is there any easier or shorter way to write this repeat code?
我想知道是否有更短/更簡單的方法來編寫重復代碼。 如果在提示框中輸入的名稱沒有任何內容,那么它將發送錯誤消息並重新輸出。
就這樣,我不必解釋很多,繼承人的代碼:
function error() {
alert('You must enter a name.');
}
var Name = prompt('What is your name?', 'Name');
function repeat() {
var Name = prompt('What is your name?', 'Name');
if(Name === '') {
error();
repeat();
}
}
if(Name === '') {
error();
repeat();
}
像這樣:
var Name; while(!(Name=prompt('What is your name?', 'Name'))) { alert('You must enter a name.'); }
這個怎么運作
while
循環重復直到滿足條件。 在這種情況下,條件是:
!(Name=prompt('What is your name?', 'Name'))
表達式的這一部分將prompt
值分配給Name
(您已經知道):
Name=prompt('What is your name?', 'Name')
在JavaScript中,對變量的賦值也返回值。 (這就是為什么我們可以鏈接分配,例如a = b = c = 16
)
因此,如果您輸入“Johnathan”作為名稱,則此表達式將變為“Johnathan”:
(Name=prompt('What is your name?', 'Name'))
如果您不輸入任何內容作為名稱,則表達式將變為空字符串。
表達式之前的邏輯NOT運算符( !
)返回與表達式的“真實性”相反的布爾值。 字符串值是真實的 ,但是空字符串是假的 。
通過將NOT運算符應用於表達式:
!(Name=prompt('What is your name?', 'Name'))
...循環將繼續,直到Name
變量具有值。
最后的想法:按照慣例,變量應該以小寫字母開頭。 我沒有在這里做過,因為name
是window
的屬性,更改窗口的名稱可能會導致問題。 理想情況下,您的提示符將在函數內,因此您不會有任何全局變量。 如果是這種情況,您可以使用其他人建議的變量name
。
雖然我喜歡在while循環中完成所有操作,但我自己也會這樣做。 同樣值得理解它和do..while循環之間的區別,這可能有助於初學者按順序閱讀事物並理解每一步。
var name;
do {
name = prompt('What is your name?', 'Name');
if (name == '') {
alert('You must enter a name.');
}
} while (name == ''); // jump back to first line of *do* body if true.
function repeat() {
var Name = prompt('What is your name?', 'Name');
if(!Name) {
repeat();
} else {
return;
}
}
只需在函數內部調用自己,僅在滿足條件時退出。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.