JavaScript数字反转函数疑问:n=n+""及split/join参数为何为空?
数字反转代码的技术疑问解答
1. 为何必须将变量n赋值为n + ""?
因为你传入的n是数字类型,而split()、reverse()这些方法是JavaScript里字符串对象独有的方法,数字本身根本没有这些方法。n + ""是把数字快速转成字符串的简便写法,只有转成字符串后,才能调用后续的字符串拆分、反转相关操作。
2. return语句中,split和join方法为何要传入空字符串,而非仅使用reverse?
首先要明确:reverse()是数组的方法,字符串本身没有reverse()方法,必须先把字符串转成数组才能反转。
split("")的作用是把字符串拆成单个字符组成的数组,比如"32243"会变成["3","2","2","4","3"],这样reverse()才能逐个反转数组里的元素。如果不传空字符串,split()默认不会拆分,直接返回一个只包含原字符串的数组,反转后还是原数组,完全达不到拆分字符反转的效果。join("")是把反转后的字符数组重新拼成完整字符串。如果不传空字符串,join()默认会用逗号当分隔符拼接,反转后的数组会变成"3,4,2,2,3"这种带逗号的字符串,转成数字就会变成NaN,完全不符合预期。
3. 为何下方代码会报错?
先看报错代码:
function reverse_a_number(n) { return n.split().reverse().join(); } console.log(Number(reverse_a_number(32243)));
报错的核心原因有两点:
- 传入的
n是数字类型,数字根本没有split()方法,直接调用会抛出TypeError: n.split is not a function的错误。 - 就算忽略类型问题,假设
n是字符串:split()不传参数会返回一个只包含原字符串的数组,reverse()反转后还是原数组,join()不传参数会用逗号拼接,最终得到的是带逗号的字符串,转数字后会变成NaN,也实现不了数字反转的功能。
内容的提问来源于stack exchange,提问作者novice_OA
相关产品推荐
相关产品推荐

