2016-04-28 63 views
2

Screenshot of my attempt號( 「999」)給出了999,但數(input.value)給出的NaN,即使顯示input.value給 「999」 正是我的號碼輸入( 「999」)

我是初學者編碼。剛剛開始JS。這是我在這個論壇上的第一篇文章。 問題:請參閱代碼。 「999」用引號輸入。首先作爲在屏幕上顯示999的數字(「999」)。但是,如果我在輸入框中輸入「999」(包括引號),然後使用Number()從輸入框中轉換值,它會顯示NaN?即使當我從輸入顯示值時,它是「999」。

請指導。

p.s.我試圖上傳截圖,似乎沒有出現!但網址是在我的帖子開始。

<html> 
    <body> 
     <p id="demo1"></p> 
     <br> 
     <br> 
     <br> 
     <input id="number" /> 
     <br> 
     <button onclick="fn()"> Type "999" with quotes</button> 
     <p id="demo2"></p> 
     <p id="demo3"></p> 
     <script> 
      document.getElementById("demo1").innerHTML = Number("999"); 
      function fn() 
      { 
       var age = Number(document.getElementById("number").value); 
       document.getElementById("demo2").innerHTML = age; 
       document.getElementById("demo3").innerHTML = document.getElementById("number").value; 

      } 
     </script> 
    </body> 
</html> 
+5

表單控件的值始終是一個字符串,所以不帶引號你得到'號(「9999」)',但是當你包括報價,你越來越'Number('「9999」')'由於引號而解析爲NaN。請注意,在JavaScript中,單引號和雙引號是可以互換的,但必須匹配(例如,您可以執行「'」或「」'a'「')。 – RobG

+0

謝謝!這是有道理的。我已經嘗試''999''來獲得NaN,但是對我而言並沒有發生這種情況。 – Mani

回答

7

當您鍵入999到輸入框,然後輸入框的值是"999"。引用value屬性在代碼中的處理方式與文字"999"相同。

當您在輸入框中鍵入"999"時,輸入框的值爲"\"999\""

想想這樣:如果您在輸入框中輸入了foo bar,則該值必須是字符串"foo bar"。價值不可能是foo bar。這不是有效的JavaScript語法。


如果你想允許引號,但不要求他們,你可以去掉所有的報價與文替代:

var age = Number(document.getElementById("number").value.replace(/"/g, '')); 

如果它是重要的報價是否合理,該值是解釋像一個JavaScript字符串,你可以使用JSON.parse:

var age = Number(JSON.parse(document.getElementById("number").value)); 
+0

是的,但你會如何解決這個問題?我想像OP更關心這一點。 –

+2

嚴格來說,情況恰恰相反:JS字面意思是「999」產生字符串「999」,而文字「」999「」產生字符串「999」。 – Oriol

+0

感謝您對AgentME的解答。 它肯定會提供豐富的信息來了解它。 – Mani