为什么Number.isNaN()为字符串返回false?

时间:2017-07-10 12:01:13

标签: javascript nan

根据我的理解,NaN代表Not A Number字符串绝对不是数字,因此我希望以下代码为字符串返回true。但事实并非如此。



console.log(Number.isNaN("Stack Overflow"));




请有人澄清一下吗?

8 个答案:

答案 0 :(得分:5)

isNaNconsole.log('Number.isNaN("Stack Overflow"): '+Number.isNaN("Stack Overflow")); console.log('isNaN("Stack Overflow"): '+isNaN("Stack Overflow"));

之间存在区别

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/isNaN

  

isNaN()函数确定值是否为NaN。

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Number/isNaN

  

Number.isNaN()方法确定传递的值是否为NaN,其类型是否为Number。它是原始的全局isNaN()的一个更强大的版本。

你返回false的原因是" Stack Overflow"不是数字,它是一个字符串。



Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
Dim strValidationList As String
Dim strVal As String
Dim lngNum As Long

On Error GoTo Nevermind
strValidationList = Mid(Target.Validation.Formula1, 2)
strVal = Target.Value
lngNum = Application.WorksheetFunction.Match(strVal, Range(strValidationList), 0)

If strVal <> "" And lngNum > 0 Then
    Application.EnableEvents = False
    Target.Formula = "=INDEX(" & strValidationList & ", " & lngNum & ")"
End If

Nevermind:
    Application.EnableEvents = True

End Sub
&#13;
&#13;
&#13;

答案 1 :(得分:1)

这不是Number.isNaN。

console.log(isNaN("Stack Overflow"));

答案 2 :(得分:1)

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Number/isNaN#Description

  

与全局isNaN()函数相比,Number.isNaN()没有   遇到强制将参数转换为数字的问题。   这意味着现在可以安全地传递通常会转换的值   到NaN,但实际上与NaN的值不同。这也意味着   只有类型编号的值,也是NaN,返回true

答案 3 :(得分:1)

返回true:

console.log(isNaN("Stack Overflow"));

然后返回false:

console.log(Number.isNaN("Stack Overflow"));

答案 4 :(得分:0)

我必须这样做

Number.isNaN(Number("Stack Overflow")) // returns true
Number.isNaN(Number(false)) // returns false (unfortunately)
Number.isNaN(Number(12)) // returns false
Number.isNaN(Number(12.02)) // returns false

答案 5 :(得分:0)

这看起来很奇怪,但一旦理解 NaN 在此处描述的严格意义上的“非数字”Why does typeof NaN return 'number'?(除以零等),这就是我使用的:

typeof value === "number" && !isNaN(value)

答案 6 :(得分:-1)

试试:

&#13;
&#13;
console.log(isNaN("Stack Overflow"));
&#13;
&#13;
&#13;

答案 7 :(得分:-3)

根据MDN,非数字值首先被强制转换为数字,然后测试NaN。因此,JS中的空字符串("")被认为是假的,因此转换为0,这绝对是一个数字。