我注意到了正确的
return str.slice(0, res);
返回与错误
相同的值var str = "some_string";
return str.slice(str, res);
在这种情况下,str
是一个字符串,res
是一个数字数量。
我的猜测是因为切片需要一个数字量并且没有得到一个(对于第一个参数),它将它找到的内容转换为0。
这是预期的行为吗?
答案 0 :(得分:1)
JavaScript提供隐式类型强制。这意味着如果期望一个整数(如这里的情况),它将convert提供给整数的值。如果不能判断合理的值,则使用零。
如果提供了整数,那就太棒了!
如果提供了一个字符串并且它看起来像一个整数(例如str.slice("5", res)
),它将被转换为预期的整数。
如果提供了字符串并且它看起来不像数字(例如str.slice("abc", res)
),则使用0
。
答案 1 :(得分:0)
我的猜测是因为切片需要一个数字量并且没有得到一个(对于第一个参数),它将它找到的内容转换为0。
那是basically what happens。 .slice
在第一个参数上调用ToInteger
,后者又调用ToNumber
。但如果该值无法转换为数字(如果结果为NaN
),则返回0
。
因此,如果您将数字字符串作为开头传递,.slice
将从该字符串的数学值开始。任何其他字符串都会转换为0
。