You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何在array.map中使用parseInt处理IP拆分数组会返回异常值?

为什么parseIP函数返回[0, NaN, 0, 0]?

先看你写的代码:

function parseIP(str) {
  octets = str.split('.');
  console.log(octets);
  return octets.map(parseInt);
}

console.log(parseIP("0.0.0.0"));

问题出在Array.map()和parseInt()的参数传递逻辑上:

  • map()会给回调函数传递三个参数:当前遍历的元素、元素的索引、原数组
  • parseInt()接受两个参数:要解析的字符串,以及基数(radix)——也就是解析时使用的进制数,合法范围是2到36

当你直接把parseInt传给map时,实际执行的是这四次调用:

  1. parseInt("0", 0):基数为0时,parseInt会默认按十进制解析"0",返回0
  2. parseInt("0", 1):基数1属于无效进制,直接返回NaN
  3. parseInt("0", 2):基数2是二进制,"0"是合法二进制数,返回0
  4. parseInt("0", 3):基数3是三进制,"0"合法,返回0

这就是结果中出现NaN的核心原因。

修复方法

你可以显式给parseInt指定十进制基数,同时避免map传递的索引被当作基数:

function parseIP(str) {
  const octets = str.split('.');
  return octets.map(octet => parseInt(octet, 10));
}

或者更简单,用Number()函数转换——它不会接收额外参数,不会出现参数混淆问题:

function parseIP(str) {
  const octets = str.split('.');
  return octets.map(Number);
}

内容的提问来源于stack exchange,提问作者Harvey Pham

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 20:03:14