gpt4 book ai didi

javascript - isNaN 无法正常工作

转载 作者:行者123 更新时间:2023-11-29 18:19:24 26 4
gpt4 key购买 nike

这是我放在文本框上以限制输入数字的属性。

 onKeyPress="if(isNaN(String.fromCharCode(event.keyCode))) event.preventDefault();"

与谷歌浏览器完美搭配。 isNaN 函数为非数字按键返回 true,为每个数字按键返回 false。但在 firefox isNaN 函数中,数字和非数字按键均返回 true。

我读到 isNaN 函数支持跨浏览器,但它在 firefox 中不能正常工作。我在这里做错了什么?

最佳答案

将特殊情况行为与 isNaN() 混淆

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

下一版本的 ECMAScript (ES6) 包含函数 Number.isNaN 函数。 Number.isNaN(x) 将是测试 x 是否为 NaN 的可靠方法。然而,即使使用 Number.isNaN,NaN 的含义仍然是精确的数字含义,而不仅仅是“不是数字”。或者,在没有 Number.isNaN 的情况下,表达式 (x != x) 是测试变量 x 是否为 NaN 的更可靠方法,因为结果不受导致 isNaN 不可靠的误报的影响。

示例:

    isNaN(NaN);       // true
isNaN(undefined); // true
isNaN({}); // true

isNaN(true); // false
isNaN(null); // false
isNaN(37); // false

// strings
isNaN("37"); // false: "37" is converted to the number 37 which is not NaN
isNaN("37.37"); // false: "37.37" is converted to the number 37.37 which is not NaN
isNaN(""); // false: the empty string is converted to 0 which is not NaN
isNaN(" "); // false: a string with spaces is converted to 0 which is not NaN

// This is a false positive and the reason why isNaN is not entirely reliable
isNaN("blabla") // true: "blabla" is converted to a number. Parsing this as a number fails and returns NaN

引用:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/isNaN

关于javascript - isNaN 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20234026/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com