字符串编号混淆

问题描述:

为什么parseInt("-1000-500-75-33")返回-1000字符串编号混淆

难道不应该返回这些数字的总和:-1608

我怎样才能得到字符串"-1000-500-75-33"返回那些数字的总和?

+0

'的eval(“ - 1000-500-75-33”)的toString()'? – Hodrobond

+1

@Hodrobond工作,谢谢!如果你将其作为回答发布,我会给你道具 –

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 

尝试eval!it's safe here

eval("-1000-500-75-33").toString()

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);