编写重复字符串函数返回NaN,求问题原因及正确实现方法
字符串重复函数返回NaN的问题分析与修复
问题根源
你用word * n实现字符串重复是核心错误:JavaScript中*是算术乘法运算符,当字符串和数字相乘时,JS会尝试把字符串转为数字——"hello"转数字会得到NaN(非数字),NaN和任何数相乘结果还是NaN,这就是返回NaN的原因。
你的代码还有其他低级错误:
- 重复定义了三次
pere函数,后面的定义会覆盖前面的,完全没必要 - 最后一行
console.log ((hello)(3));是语法错误:hello既不是函数也未定义为变量,执行会抛出ReferenceError
正确实现方式
方法1:用ES6原生repeat()方法(推荐)
这是最简单高效的方式,现代浏览器都支持:
function pere(word, n) { return word.repeat(n); } console.log(pere("hello", 3)); // 输出:hellohellohello
方法2:循环拼接(兼容旧环境)
如果需要支持不兼容ES6的旧环境,用循环累加字符串:
function pere(word, n) { let result = ''; for (let i = 0; i < n; i++) { result += word; } return result; } console.log(pere("hello", 3)); // 输出:hellohellohello
额外优化:参数校验
可以加简单的参数校验,避免非法输入导致异常:
function pere(word, n) { // 确保word是字符串,n是正整数 if (typeof word !== 'string' || typeof n !== 'number' || n < 1 || !Number.isInteger(n)) { return ''; // 或根据需求抛出错误 } return word.repeat(n); }
内容的提问来源于stack exchange,提问作者dev
相关产品推荐
相关产品推荐

