为啥“valueAsNumber”返回 NaN 作为值?

Posted

技术标签:

【中文标题】为啥“valueAsNumber”返回 NaN 作为值?【英文标题】:Why does 'valueAsNumber' return NaN as a value?为什么“valueAsNumber”返回 NaN 作为值? 【发布时间】:2013-08-06 09:22:40 【问题描述】:

在下面的代码中,我试图调用valueAsNumber,但我只得到一个 NaN 返回。当我使用parseInt 时,我得到了我期望的结果。这是为什么呢?

<html>                                                                                                                                                                                                     
<head>                                                                                                                                                                                                     
<title>javascript: Demo 1</title>                                                                                                                                                                          
<link rel="stylesheet" type="text/css" href="index.css">                                                                                                                                                   
</head>                                                                                                                                                                                                    

<body>                                                                                                                                                                                                     
<div id="numbers">                                                                                                                                                                                         
  <div id="inputs">                                                                                                                                                                                        
    <form name="inputForm">                                                                                                                                                                                
    <div class="prompt">Number 1: <input name="number1" type="text"></div>                                                                                                                                 
    <div class="prompt">Number 2: <input name="number2" type="text"></div>                                                                                                                                 
    </form>                                                                                                                                                                                                
  </div>                                                                                                                                                                                                   
  <div id="result">                                                                                                                                                                                        
    <div class="prompt">RESULT: <span id="operation_result">&nbsp;</span></div>                                                                                                                            
  </div>                                                                                                                                                                                                   
</div>                                                                                                                                                                                                     
<div id="operations">                                                                                                                                                                                      
<p><a id="add_link" href="#" onClick="add(this)">ADD</a></p>                                                                                                                                               
</div>                                                                                                                                                                                                     

<script type="text/javascript">                                                                                                                                                                            
  function add(linkElement)                                                                                                                                                                               
  // var value1 = parseInt(document.inputForm.number1.value);
  // var value2 = parseInt(document.inputForm.number2.value);

  var value1 = document.inputForm.number1.valueAsNumber;
  var value2 = document.inputForm.number2.valueAsNumber;                                                                                                                                              
    var result = value1 + value1;                                                                                                                                                                          

    document.getElementById('operation_result').innerHTML = result;                                                                                                                                        
                                                                                                                                                                                                          
</script>                                                                                                                                                                                                  

</body>                                                                                                                                                                                                    
</html>                                                                                                                                                                                                    

【问题讨论】:

【参考方案1】:

考虑到属性名称,您的期望是合理的,但阅读实际的specs/documentation:

valueAsNumber IDL 属性表示元素的值, 解释为数字。

获取时,如果 valueAsNumber 属性不适用,如定义 对于输入元素的类型属性的当前状态,然后返回一个 非数字 (NaN) 值。

Here's a table 该列表的types 适用于valueAsNumber。它们是:

日期和时间 (datetime)(注意这个 type="" 现在在 HTML LS 中已过时) 日期 (date) 月 (month) 周 (week) 时间 (time) 本地日期和时间 (datetime-local) 号码 (number) 范围 (range)

请注意type="text" 明显不在上述列表中,因此textInput.valueAsNumber 将始终返回NaN,即使isNaN( parseInt( textInput.value, 10 ) ) === false 时也是如此。

【讨论】:

即仍然返回 NaN。在 Windows 10 中尝试了 type=number。 一切正常,只需输入:inp_el.type='number'; inp_el.value='12' 或 12 你会看到 valueAsNumber=12【参考方案2】:

您必须将inputtype 设置为number

<input name="number1" type="number">

另外,如果值为空或非数字,它将返回NaN

【讨论】:

当心,这在边缘仍然不起作用:***.com/questions/34251265/…【参考方案3】:

我用演员固定:

 var nOP = Number(document.getElementById("hidNED").value);

在我的情况下,hidNED 的唯一可能内容是 0、1、2、3。 我对 javascript 很陌生,不知道 valueAsNumber,但如果我曾经尝试过的话,我可能已经尝试过了。

【讨论】:

以上是关于为啥“valueAsNumber”返回 NaN 作为值?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 [NaN].includes(NaN) 在 JavaScript 中返回 true?

为啥 Double.NaN==Double.NaN 返回 false?

为啥 typeof NaN 返回“数字”?

为啥这个函数返回 NaN?

为啥 Math.round() 为 NaN 参数返回 0?

如果参数是数字,为啥函数返回 NaN?