我是编码的完整初学者。我正在学习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是数字”,我将不胜感激。非常感谢。
答案 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.isNaN
,NaN
的含义仍然是精确的数字含义,而不是简单的“非数字”。另外,如果没有Number.isNaN
,则表达式(x != x)
是测试变量x
是否为NaN
的更可靠的方法,因为结果不存在错误。使isNaN
不可靠的肯定因素。
来源:isNaN
on MDN
根据规范:
18.2.3 isNaN(number)
isNaN
函数是%isNaN%
内部对象。当使用一个参数isNaN
调用number
函数时,将执行以下步骤:
- 让
num
为ToNumber(number)
。ReturnIfAbrupt(num)
。- 如果
num
是NaN
,请返回true
。- 否则,返回
false
。
答案 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
}