簡體   English   中英

是否有更簡單或更短的方法來編寫此重復代碼?

[英]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變量具有值。

最后的想法:按照慣例,變量應該以小寫字母開頭。 我沒有在這里做過,因為namewindow的屬性,更改窗口的名稱可能會導致問題。 理想情況下,您的提示符將在函數內,因此您不會有任何全局變量。 如果是這種情況,您可以使用其他人建議的變量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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM