字符串编号混淆
问题描述:
为什么parseInt("-1000-500-75-33")
返回-1000
?字符串编号混淆
难道不应该返回这些数字的总和:-1608
我怎样才能得到字符串"-1000-500-75-33"
返回那些数字的总和?
答
parseInt
将尝试从字符串的开始处获取一个数字。
由于-
是一个有效的字符开头的数字,它解析字符串,直到它找到无效的东西。第二个-
无效,因为没有整数可以包含其中的-
,只有数字。所以它停在那里,认为这个数字是“完成”的。现在
,如果你想过程的表达,你可以使用eval
像这样:
eval("-1000-500-75-33")
这将返回-1608
预期。
答
因为它们在一个字符串中,所以ParseInt并不解析整个字符串,只是从开始的&找到第一个适用的数字并返回它。如果字符串的开头不能被解析,它返回NaN
parseInt("-1000NOT_NUMBER") = -1000
parseInt("test-1000`) = NaN
你必须使用eval
功能做你想做的,计算结果给定的字符串,就好像它是一个命令进入控制台;
eval("-1000-500-75-33") = -1608
答
console.log(eval("-1000-500-75-33").toString());
而关于类型转换:解析-1000,这显然是 “负1000” 后,它会逃跑尽快铸造,因为它检测数字&字符串之间的共同符号。所以parseInt
看到"-1000-500-75-33"
为"-1000NotConvertableString"
,所以留下剩余的,作为类型转换的结果返回-1000
。
答
parseInt
不会执行任何计算,而是会尝试将字符串转换为整数。它返回-1000
,因为之后的破折号不会被认为是有效的数字。如果要总结所有这些数字,你可能分裂上划线,映射到数字,然后降低:
var numString = "-1000-500-75-33";
numString.split('-').map(e => Number(e)).reduce((a, b) => a - b);
'的eval(“ - 1000-500-75-33”)的toString()'? – Hodrobond
@Hodrobond工作,谢谢!如果你将其作为回答发布,我会给你道具 –