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>
非常感谢!
最佳答案
对于您的问题:
为什么这里的 155100 是一个数字?就像 255 一样 if
var s = 155
;?它是一个字符串,但当传递给
isNaN
时,该函数会将其强制转换为数字,然后返回该强制转换是否导致NaN
。为什么即使
var n = "100";
155100 仍然是一个数字?见上文。事实并非如此。
var res
在哪里以及为何转换为数字?它不是——它仍然是一个字符串。
但正如记录的那样on MDN :
When the argument to the
isNaN
function is not of typeNumber
, the value is first coerced to aNumber
.
注释
要检查变量是否属于 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/