字符串到数字混淆
String To Number Confusion
为什么 parseInt("-1000-500-75-33")
return -1000
?
不应该 return 这些数字的总和:-1608
如何将字符串 "-1000-500-75-33"
到 return 作为这些数字的总和?
parseInt
将尝试从字符串的开头获取一个数字。
由于 -
是数字开头的有效字符,它会解析字符串,直到找到无效字符。第二个 -
无效,因为没有整数可以在其中包含 -
,只能包含数字。所以它停在那里并认为数字是 "finished".
现在,如果你想处理表达式,你可以像这样使用eval
:
eval("-1000-500-75-33")
这将 return -1608
正如预期的那样。
因为它们在一个字符串中,ParseInt 不会解析整个字符串,只是从头开始找到第一个适用的数字 & returns 它。如果无法解析字符串的开头,则 returns 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后,显然是"negative 1000",它会在检测到数字和字符串之间的公共符号时立即逃避转换。所以 parseInt
将 "-1000-500-75-33"
视为 "-1000NotConvertableString"
,因此将剩余的部分留在一边,返回 -1000
作为类型转换的结果。
parseInt
不会执行任何计算,而是会尝试将字符串转换为整数。它 returns -1000
因为后面的破折号不会被视为有效数字。如果你想对所有这些数字求和,你可以在破折号上拆分,映射到数字,然后减少:
var numString = "-1000-500-75-33";
numString.split('-').map(e => Number(e)).reduce((a, b) => a - b);
为什么 parseInt("-1000-500-75-33")
return -1000
?
不应该 return 这些数字的总和:-1608
如何将字符串 "-1000-500-75-33"
到 return 作为这些数字的总和?
parseInt
将尝试从字符串的开头获取一个数字。
由于 -
是数字开头的有效字符,它会解析字符串,直到找到无效字符。第二个 -
无效,因为没有整数可以在其中包含 -
,只能包含数字。所以它停在那里并认为数字是 "finished".
现在,如果你想处理表达式,你可以像这样使用eval
:
eval("-1000-500-75-33")
这将 return -1608
正如预期的那样。
因为它们在一个字符串中,ParseInt 不会解析整个字符串,只是从头开始找到第一个适用的数字 & returns 它。如果无法解析字符串的开头,则 returns 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后,显然是"negative 1000",它会在检测到数字和字符串之间的公共符号时立即逃避转换。所以 parseInt
将 "-1000-500-75-33"
视为 "-1000NotConvertableString"
,因此将剩余的部分留在一边,返回 -1000
作为类型转换的结果。
parseInt
不会执行任何计算,而是会尝试将字符串转换为整数。它 returns -1000
因为后面的破折号不会被视为有效数字。如果你想对所有这些数字求和,你可以在破折号上拆分,映射到数字,然后减少:
var numString = "-1000-500-75-33";
numString.split('-').map(e => Number(e)).reduce((a, b) => a - b);