为什么parseInt("-1000-500-75-33")
会返回-1000
?
不应该返回这些数字的总和:-1608
如何将字符串"-1000-500-75-33"
作为这些数字的总和返回?
答案 0 :(得分:3)
parseInt
将尝试从字符串的开头获取一个数字。
由于-
是用于开始数字的有效字符,因此它会解析字符串,直到找到无效的字符串。第二个-
无效,因为没有整数可以在其中包含-
,只有数字。所以它停在那里并认为数字是"完成"。
现在,如果你想处理表达式,你可以像这样使用eval
:
eval("-1000-500-75-33")
这将按预期返回-1608
。
答案 1 :(得分:1)
parseInt
将不执行任何计算,而是尝试将字符串转换为整数。它返回-1000
,因为之后的破折号不会被视为有效数字。如果你想将所有这些数字相加,你可以在破折号上分割,映射到数字,然后减少:
var numString = "-1000-500-75-33";
numString.split('-').map(e => Number(e)).reduce((a, b) => a - b);
答案 2 :(得分:0)
由于它们在一个字符串中,ParseInt不会解析整个字符串,只是从开头找到第一个适用的数字&归还它。如果无法解析字符串的开头,则返回NaN
parseInt("-1000NOT_NUMBER") = -1000
parseInt("test-1000`) = NaN
您必须使用eval
函数来执行您想要的操作,它会评估给定的字符串,就好像它是输入控制台的命令一样;
eval("-1000-500-75-33") = -1608
答案 3 :(得分:0)
eval("-1000-500-75-33").toString()
答案 4 :(得分:0)
console.log(eval("-1000-500-75-33").toString());
关于类型转换:解析-1000后,显然是“负1000”,一旦检测到数字和数字之间共同的符号,它将逃脱转换。字符串。因此parseInt
将"-1000-500-75-33"
视为"-1000NotConvertableString"
,因此留下剩下的距离,返回-1000
作为类型转换的结果。