2016-04-28 4 views
2

Screenshot of my attemptNummer ("999") gibt 999 aber Nummer (input.value) gibt NaN, obwohl input.value Anzeige "999" gibt genau das, was ich in Nummer ("999") eingeben

ich bin Anfänger zum Codieren. Ich habe gerade mit JS angefangen. Dies ist mein erster Beitrag in diesem Forum. Frage: Bitte sehen Sie den Code. "999" wird in Anführungszeichen eingegeben. Zuerst als Nummer ("999"), die 999 auf dem Bildschirm anzeigt. Aber wenn ich "999" (Anführungszeichen eingeschlossen) in ein Eingabefeld eintrage, dann benutze Number(), um den Wert aus dem Eingabefeld zu konvertieren, es zeigt NaN ??? Obwohl, wenn ich Wert von Eingabe anzeigen, ist es "999".

Bitte führen.

p.s. Ich habe versucht, Screenshot hochzuladen, scheint nicht zu erscheinen! Aber URL ist am Anfang meines Beitrags.

<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

der Wert einer Steuerform ist immer eine Zeichenkette, so ohne Anführungszeichen Sie bekommen'Anzahl (‚9999‘) ', aber wenn man die include Zitate, du bekommst 'Zahl ('" 9999 "')', die wegen der Anführungszeichen in NaN aufgelöst wird. Beachten Sie, dass Einzel- und doppelte Anführungszeichen in JavaScript austauschbar sind, aber angepasst werden müssen (z. B. können Sie "" "" "oder" "a" "). – RobG

+0

Danke! Das hat Sinn. Ich habe '' 999 '' versucht, NaN zu bekommen, aber mir ist nicht aufgefallen, dass dies auch der Formkontrolle entspricht. – Mani

Antwort

7

Wenn Sie 999 in das Eingabefeld eingeben, dann wird der Wert des Eingabefeldes ist "999". Das Referenzieren der Eigenschaft value wird in Ihrem Code genauso behandelt wie das Literal "999". Wenn Sie "999" in das Eingabefeld eingeben, ist der Wert des Eingabefeldes

Denken Sie darüber nach: Wenn Sie in das Eingabefeld foo bar eingegeben haben, muss der Wert die Zeichenfolge "foo bar" sein. Der Wert konnte nicht foo bar sein. Das ist keine gültige JavaScript-Syntax.


Wenn Sie Anführungszeichen erlauben, aber sie nicht benötigen, können Sie mit einem Text-Ersatz alle Zitate abstreifen könnte:

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

Wenn es wichtig ist, dass die Zitate Sinn machen, und dass der Wert sein interpretiert wie ein JavaScript-String, könnten Sie JSON.parse verwenden:

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

Ja, aber wie würdest du das reparieren? Ich stelle mir vor, OP kümmert sich mehr darum. –

+2

Genau genommen ist das Gegenteil der Fall: das JS-Literal '" 999 "' erzeugt den String '999', und das Literal' "\" 999 \ "" erzeugt den String '' 999''. – Oriol

+0

Danke für die Antwort AgentME. Es wäre auf jeden Fall informativ, einen Weg zu kennen. – Mani