数字("999")给出999,但数字(input.value)给出NaN,即使显示input.value给出"999"正是我输入的数字("999")

Man*_*ani 2 javascript numbers

我尝试的截图

我是编码的初学者.刚开始JS.这是我在这个论坛上的第一篇文章.问题:请参阅代码.输入"999"带引号.首先是数字("999"),在屏幕上显示999.但是如果我在输入框中输入"999"(包括引号),然后使用Number()从输入框转换值,它会显示NaN ??? 即使从输入显示值,也是"999".

请指导.

ps我试图上传截图,似乎没有出现!但网址是我的帖子的开头.

<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>
Run Code Online (Sandbox Code Playgroud)

Mac*_*cil 7

当您999在输入框中键入内容时,输入框的值为"999".引用value属性将在代码中与文字相同"999".

当您"999"在输入框中键入时,输入框的值为"\"999\"".

这样考虑一下:如果输入foo bar到输入框,则值必须是字符串"foo bar".价值不可能foo bar.这不是有效的JavaScript语法.


如果您想允许引号但不需要引号,则可以使用文本替换删除所有引号:

var age = Number(document.getElementById("number").value.replace(/"/g, ''));
Run Code Online (Sandbox Code Playgroud)

如果引号有意义并且值被解释为javascript字符串很重要,那么可以使用JSON.parse:

var age = Number(JSON.parse(document.getElementById("number").value));
Run Code Online (Sandbox Code Playgroud)

  • 严格来说,恰恰相反:JS文字"999"生成字符串`999`,文字`"\"999 \""`生成字符串`"999"`. (2认同)
  • @Oriol我认为你不同意我的意见.文字"\"999 \""对应于显示"999"的输入框,输入框中输入"999"的用户相当于文字"\"999 \""`在代码中.这些只是以相反的方式表达同样的事情. (2认同)