javascript - 将字符串(其中仅包含数字)添加到数字会产生一个数字(根据 isNaN),它看起来应该是一个字符串?

标签 javascript

1) 为什么这里的 155100 是一个数字?就像 255 是 if var s = 155;

2) 为什么即使 var n = "100"; 155100 仍然是一个数字?

3) var res 在哪里以及为何转换为数字?

我在这里缺少什么?

var s = "155";
var n = 100;
var res = s + n;
document.write(res + "<hr>");
if ( isNaN(res) ) {
    document.write("It is not a number");
}
if ( !isNaN(res) ) {
    document.write("It is a number");
}
<html>
    <head>
        <title>stackoverflow.com</title>
    </head>
    <body>
        <script src="script.js"></script>
    </body>
</html> 

非常感谢!

最佳答案

对于您的问题:

  1. 为什么这里的 155100 是一个数字?就像 255 一样 if var s = 155;?

    它是一个字符串,但当传递给 isNaN 时,该函数会将其强制转换为数字,然后返回该强制转换是否导致 NaN

  2. 为什么即使 var n = "100"; 155100 仍然是一个数字?

    见上文。事实并非如此。

  3. var res 在哪里以及为何转换为数字?

    它不是——它仍然是一个字符串。

但正如记录的那样on MDN :

When the argument to the isNaN function is not of type Number, the value is first coerced to a Number.

注释

要检查变量是否属于 Number 类型:

if (typeof res === 'number') 

要将字符串转换为数字,请使用以下之一:

i = +res;
i = Number(res);

如果您只想检查字符串的开头,并且在任何后续字符不是数字(如 123.45abc)时也不会失败,则使用:

i = parseFloat(res);

如果您只对整数感兴趣,则可以使用parseInt,最好使用第二个参数来指示基数。与 parseFloat 一样,一旦第一个字符通过测试,它就不会返回 NaN:

i = parseInt(res, 10);

关于javascript - 将字符串(其中仅包含数字)添加到数字会产生一个数字(根据 isNaN),它看起来应该是一个字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39538362/

相关文章:

javascript - Node.JS + mySQL -> 如何进行ajax调用并访问server.js上的数据?

javascript - 修复Youtube API数据分页v3

javascript - 如何在 JavaScript 中将 Hex 转换为 ASCII?

javascript - 如何确定焦点何时离开 HTML 表单(即表单的子项不再具有焦点)?

javascript - Node.js 中的路由模块出现 `Cannot GET/en/first` 错误

javascript - 检查变量,如果为 false,则创建对象

javascript - html 表单提交中 "required"关键字的错误处理

javascript - 如何更改alertify中的按钮标签 - v0.3.11

javascript - 如何在javascript中用包含该部分的新字符串替换字符串的一部分

javascript - 在不使用 contenteditable 的情况下防止选择在 Firefox 的 iframe 中变灰