2013-07-05 146 views
1
var userinput = prompt("Hello. Please enter a statement and I will repeat the last word"); 
if(typeof userinput !== "string"){ 
console.log("This is not a string."); 
} 

我是一個完整的newb,我只是想製作一個簡單的腳本,重複您輸入的語句的最後一個單詞。我添加了這個保護措施,以便如果你不輸入字符串,它會顯示一條消息,但是每當我用一個數字測試代碼時,它就會忽略這個部分,並且仍然執行else語句,它是查找最後一個代碼的代碼字。我不明白爲什麼這種保護措施不起作用。爲什麼這個基本的if語句不起作用? JavaScript

真的很感謝一些幫助。謝謝

+3

所有東西都會被提示轉換爲字符串。 –

+0

試試這個代碼:'var userinput = + prompt(「Enter number」)'然後輸入數字,注意'+' –

+0

@GrijeshChauhan將有效的字符串轉換爲NaN :)不是他想要的我想:) –

回答

3

因爲prompt()無條件地返回一個字符串(或null)。它不會試圖解析輸入的內容,而是「哦,嘿,這些都是數字,我只會返回一個int」。這意味着你的測試基本上是毫無意義的......你永遠不會得到任何東西而不是一個字符串回來,所以你的代碼總是會採用'else'路徑。

相關文檔:https://developer.mozilla.org/en-US/docs/Web/API/window.prompt

0

"123"仍然是一個字符串。

prompt返回一個字符串或null。輸入什麼字符並不重要。

0

提示返回一個字符串。該字符串可能是"2",但它仍然是一個字符串。

你可以用這樣的正則表達式測試:

var reg = /^\d+$/; 
if(reg.test(userinput)){ 
    console.log("This is a number."); 
} 

,看它是否是一個數字從用戶輸入接收

0

一切是一個字符串在第一。你想要做的是測試輸入是否可以轉換爲某種類型的數字。

0

你期待它做什麼?

prompt()總是返回一個字符串,所以userinput將永遠是一個字符串,不管用戶輸入什麼內容。如果他們沒有輸入任何內容,它將是一個空白字符串,但仍然是一個字符串。如果他們輸入一個數字,它將是一個恰好包含數字字符的字符串。

因此,您的typeof檢查將始終失敗。

如果你想檢查自己是否進入了什麼,你可以只檢查,如果它有一個非空值:

if(!userinput) { 
    //user didn't enter anything. 
} 
0

採用提示()總是會返回一個字符串。所以,你需要測試它是否也是一個數字。

if(typeof userinput === "number") { 
    console.log("This is also a number."); 
} else { 
    // only string 
} 

或者,您也可以使用isNan()來檢查「不是數字」。

0

五人,並計數對此的解釋是"1"是一個字符串...(因爲是"",空字符串),並prompt()返回字符串...


...達到什麼樣的,它聽起來就像你正在試圖做 - 給出不同的結果,如果該字符串是可以被理解爲表示數字的字符串 - 你可以試試這個:

if(parseFloat(userinput) !== NaN){ 

parseFloat()試圖將字符串轉換爲可能有小數位的數字('float')。如果它不能,它返回NaN(非數字),一個特殊的實體類型,評估爲false(但0或-1,這是數字,所以我們測試!== NaN,而不是僅僅使用if(parseFloat(userinput)){這將測試它是一些評估爲true)。

正如那些文檔解釋的那樣,這是相當寬容的,例如,它會將"5 words in this string"解釋爲5.0

parseInt()如果你只關心整數。或者,如果您想嚴格限制字符串允許的輸入類型,請閱讀regular expressions

相關問題