我有这段代码:
var sequence = $stateParams.testId.length == 14 ?
parseInt($stateParams.testId.substring(11, 2)) : 0;
我期望将序列设置为01(最后两个数字)。但是会发生的是它返回198。
有人可以解释为什么会这样吗?
console.log($ stateParams.testId)//“01198-05282-01”
console.log(sequence)// 198
答案 0 :(得分:1)
String#substring
适用于索引。
substring
的签名是
str.substring(indexStart [,indexEnd])
请注意,第二个参数是索引本身,而不是子字符串的长度。
如果
indexStart
大于indexEnd
,那么substring()
的效果就好像交换了两个参数一样;例如,str.substring(1, 0) == str.substring(0, 1)
。
所以,
.substring(11, 2)
相当于.substring(11, 2)
,它会给出子串"198-05282-"
并在其上使用parseInt()
将输出为198
。
parseInt
为10以避免意外结果<强>代码:强>
var str = '01198-05282-01';
var sequence = str.length == 14 ?
parseInt(str.substring(12, 14), 10) : 0;
// ^^ ^^
console.log(sequence);
要使用length
获取子字符串,请使用String#substr
str.substr(12, 2)
答案 1 :(得分:0)
以下是解释:
您的查询字符串包含:"01198-05282-01"
让我们把它变成一个变量:
var a= "01198-05282-01";
如果我们将其子串,
a.substring(11,2)
它将返回:
"198-05282"
你的代码中有parseInt,因此
parseInt("198-05282");
将返回
198
substring()方法返回一个字符串的子集 索引和另一个,或通过字符串的结尾。
因此,要获得所需的输出,
var a= "01198-05282-01";
console.log(a.substring(12,14)) //returns "01"
parseInt(a.substring(12,14),10) //will return 1
使用您的代码:
var sequence = $stateParams.testId.length == 14 ?
parseInt($stateParams.testId.substring(12, 14), 10) : 0;
作为
有关子字符串的更多信息:https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/String/substring
正如Tushar所建议的那样,使用基数作为parseInt
parseInt ()函数解析字符串参数并返回指定基数的整数(数学系统中的基数)。
radix :2到36之间的整数,表示上述字符串的基数(数学数字系统中的基数)。 为人类常用的十进制数字系统指定10。 始终指定此参数以消除读者的困惑和 保证可预测的行为。产生不同的实现 未指定基数时的不同结果,通常是默认值 值为10。
答案 2 :(得分:0)
substring()
中详细解释了-
的问题。如果您想获取/\d+$/
之后的最后一个数字,可以使用正则表达式。
var str = "01198-05282-01";
var sequence = (str.match(/\d+$/) || [])[0] || 0; // Get the last number, use 0 as default if not present
sequence = parseInt(sequence, 10);
<强>代码:强>
substring()
substring()
出了什么问题?
使用12
并没有错,但它有以下限制。
14
和typeof SomeClass
。还有一件事要跟踪。