为什么Javascript将字符串中的数字转换为数字?

时间:2019-01-23 11:12:32

标签: javascript

我是编码的完整初学者。我正在学习JavaScript,遇到一个无法解决的问题。希望有人可以向我解释这一点(非常感谢)。

isNaN函数应该检查一个变量,假设它不是一个数字。问题是当您这样编码时,

protected void gridDisc_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            PartEnquiryLine line = (PartEnquiryLine)e.Row.DataItem;
            Label lbl = (Label)e.Row.FindControl("lblStatusDetails");
             if (line.StatusText == Text["280"])
            {
                lbl.Text = Text["290"]
            }

如果有人能解释为什么这部分特殊代码以字符串形式表示为“ b是数字”,我将不胜感激。非常感谢。

4 个答案:

答案 0 :(得分:2)

Global.isNaN将参数转换为数字,然后检查其是否为NaN。您可能正在寻找Number.isNaN来检查它是否不是数字或NaN类型。

填充:

 Global.isNaN = n => +n !== +n;
 Number.isNaN = n => typeof n !== "number" ||  n !== n;

对于NaN,数字,字符串和对象,它们的行为相同,对于表示数字的布尔值和字符串,它们的行为不同(全局变量返回false,数字true )。

答案 1 :(得分:1)

即使isNaN被称为“不是数字”,它也不会检查值是否是“不是数字”。它专门检查值是否为NaN

NaN是一个特殊值。根据MDN的说法:“当Math函数失败(Math.sqrt(-1))或试图解析数字的函数失败(parseInt(“ blabla”))时,返回值。

因为B不是NaN,则else子句将触发,并且将警告“ B是数字”。

检查号码

如果您想知道一个值是否为数字,可以使用typeof

var b = "44";
if (typeof b !== "number") {
  alert("b is not a number");
} else {
  alert("b is a number");
}

答案 2 :(得分:1)

  

isNaN()函数确定一个值是否为NaN。注意:isNaN函数内部的强制具有有趣的规则;您可能也想使用ECMAScript 2015中定义的Number.isNaN()

     

...

     

isNaN函数规范的最早版本以来,其对非数字参数的行为一直令人困惑。 isNaN函数的参数不是Number类型时,该值首先被强制为Number。然后测试结果值以确定它是否为NaN 。因此,对于非数字,当将其强制转换为数字类型时会导致产生有效的非NaN数值(尤其是空字符串和布尔基元,当它们被强制数字为零或一时),返回的“ false”可能是意外的;例如,空字符串肯定是“不是数字”。混淆源于以下事实:术语“非数字”对于表示为IEEE-754浮点值的数字具有特定含义。 该功能应解释为回答以下问题:“当将该值强制转换为数字值时,是IEEE-754'非数字'值吗??”

     

最新版本的ECMAScript(ES2015)包含Number.isNaN()函数。 Number.isNaN(x)是测试x是否为NaN的可靠方法。但是,即使使用Number.isNaNNaN的含义仍然是精确的数字含义,而不是简单的“非数字”。另外,如果没有Number.isNaN,则表达式(x != x)是测试变量x是否为NaN的更可靠的方法,因为结果不存在错误。使isNaN不可靠的肯定因素。

来源:isNaN on MDN

根据规范:

18.2.3 isNaN(number)

  

isNaN函数是%isNaN%内部对象。当使用一个参数isNaN调用number函数时,将执行以下步骤:

     
      
  1. numToNumber(number)
  2.   
  3. ReturnIfAbrupt(num)
  4.   
  5. 如果numNaN,请返回true
  6.   
  7. 否则,返回false
  8.   

来源:ECMA-262 6th Edition - 18.2.3 isNaN(number)

答案 3 :(得分:0)

只需添加有关isNan的正确解释以及您的问题的解决方案即可:

您可以仅使用isNan()来帮助您识别变量的类型,而不是使用typeof来标识数字:

var b = "44" //this is  a string
  if ( typeof b === "number" ) {
    alert("b is a number");  // does not give me the alert
  }
  //But if you put an else statement to this
  else {
    alert("b is NOT a number"); //alerts as b is a number when it's a string
  }