我有一个文本框:

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

它绑定(bind)到这个 viewModel :
var ViewModel = function () {
    var self = this;
    self.number = ko.observable(1);
    }

稍后在 viewModel 我有函数,我检查值 Number 是否真的是一个数字并且大于一:
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())对于字母输入,它返回空字符串。那么为什么 isNaN 返回 false 而不是 true 呢?

    最佳答案

    因为您的 inputnumber 类型,所以任何非数字值都将被解释为空字符串。

    所以你最终得到一个空字符串,然后将它传递给 isNaN 。那会发生什么?请参阅规范中的 isNaN :



    所以“ToNumber”是用空字符串调用的。当对空字符串应用“ToNumber”操作时,它会强制转换为 0 ,并且 0 不是 NaN 。请参阅规范中的 ToNumber Applied to the String Type:

    关于javascript - isNaN 对字母返回 false,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22830085/

    10-12 06:03