代码之家  ›  专栏  ›  技术社区  ›  szpic

isNaN对字母返回false

  •  4
  • szpic  · 技术社区  · 12 年前

    我有一个文本框:

    <input type="number" min="0" max="100" value="1" class="form-control" data-bind="value: number,  valueupdate:'afterkeydown'" required="">
    

    它与此绑定 viewModel :

    var ViewModel = function () {
        var self = this;
        self.number = ko.observable(1);
        }
    

    稍后在 视图模型 我有一个函数,可以检查值 Number 真的是一个大于1的数字:

    if (self.number() < 1 || isNaN(self.number()) {
       console.log(isNaN(self.number());
       alert("Error");
       return true;
    }
    

    我检查了如下输入:

    • A.
    • asdsfdsfs系统
    • 1.

    对所有人来说 isNaN(self.number()) returns false

    是什么导致了这个错误?

    @更新: 我向 console.log(self.number()) 对于字母输入,它返回空字符串。那么,为什么NaN返回false而不是true?

    1 回复  |  直到 12 年前
        1
  •  4
  •   James Allardice    12 年前

    因为你的 input 属于类型 number 任何非数字的值都将被解释为空字符串。

    所以你最终得到一个空字符串,然后将其传递给 isNaN 。然后会发生什么?看见 isNaN 在规范中:

    1. 如果ToNumber( 数字 )为NaN,返回true。
    2. 否则,返回false。

    因此,使用空字符串调用“ToNumber”。空字符串强制 0 对其应用“ToNumber”操作时,以及 0 不是 NaN 看见 ToNumber Applied to the String Type 在规范中:

    的MV 字符串数字文字 :::[empty]为0。