pad函数出现invalid count value错误,代码与教程一致却无法运行
问题:pad函数运行时出现"invalid count value"错误
我编写的pad函数和课程教程代码完全一致,教程里能正常运行,但自己测试时控制台报"invalid count value"错误。已经查过MDN没找到有效排查方向,求下一步解决方法。
代码如下:
pad(string, length) { if(length < string.length) { return string; } const startPaddingLength = Math.floor(length - string.length / 2); const endPaddingLength = length - string.length - startPaddingLength; const paddedString = ' '.repeat(startPaddingLength) + string + ' '.repeat(endPaddingLength); return paddedString; }
解决方法
先定位错误根源:"invalid count value"是
String.prototype.repeat()的参数非法导致的,这个方法要求参数必须是非负整数,不能是负数、NaN或无穷大。在代码里添加日志,打印startPaddingLength和endPaddingLength的值,确认是否出现负数:pad(string, length) { if(length < string.length) { return string; } const startPaddingLength = Math.floor(length - string.length / 2); const endPaddingLength = length - string.length - startPaddingLength; // 新增日志查看参数值 console.log('start:', startPaddingLength, 'end:', endPaddingLength); const paddedString = ' '.repeat(startPaddingLength) + string + ' '.repeat(endPaddingLength); return paddedString; }测试后会发现,当
length小于string.length的2倍时,endPaddingLength会变成负数,比如字符串长度为5、length设为7时,计算出的endPaddingLength是-2,这就触发了错误。修复计算逻辑的括号错误:代码里运算顺序有误,应该先计算总需补充的长度(
length - string.length),再除以2分配前后补位。修改startPaddingLength的计算代码:const startPaddingLength = Math.floor((length - string.length) / 2);这样能保证总补位长度被正确拆分,不会出现负数的补位长度。
补充参数校验(可选):为避免传入非法参数导致后续错误,在函数开头增加校验逻辑,确保输入符合预期:
pad(string, length) { // 校验参数类型和合法性 if (typeof string !== 'string' || typeof length !== 'number' || length < 0) { return string; } if(length < string.length) { return string; } const startPaddingLength = Math.floor((length - string.length) / 2); const endPaddingLength = length - string.length - startPaddingLength; const paddedString = ' '.repeat(startPaddingLength) + string + ' '.repeat(endPaddingLength); return paddedString; }测试边界情况:比如测试
length等于string.length、length比string.length大1、大偶数、大奇数等场景,确认函数在各种情况下都能正常运行。
内容的提问来源于stack exchange,提问作者James Bell
相关产品推荐
相关产品推荐

