当前位置: 首页 > news >正文

JavaScript中的函数parseInt(string, radix)解析

好的,我们来详细解析 console.log(parseInt("10+15", 2)); 这个例子,并深入讲解 parseInt(string, radix) 函数的工作原理。

直接答案

console.log(parseInt("10+15", 2)); 的输出结果是 2

这个结果可能出乎意料。下面我们一步步拆解,告诉你为什么是 2


函数定义:parseInt(string, radix)

作用:解析一个字符串参数,并返回一个指定基数(进制)的整数。

  • string:要被解析的值。如果参数不是字符串,则会使用 ToString 抽象操作将其转换为字符串。字符串开头的空白符会被忽略。

  • radix(基数):一个介于 2 到 36 之间的整数,表示字符串的进制。这个参数非常重要且容易出错。

核心解析过程

parseInt 的工作流程可以概括为:

  1. 忽略前缀空白parseInt(" 10") 会忽略空格,解析 "10"

  2. 逐字符解析:函数会从左到右依次检查字符串中的每个字符,直到遇到一个不属于指定进制的有效数字的字符为止。

  3. 截断并转换:将找到的有效数字字符序列截取出来,并将其解释为指定进制的数字,最后转换为十进制整数返回。

  4. 忽略无效后缀:第一个无效字符之后的所有内容都会被完全忽略。


逐步拆解 parseInt("10+15", 2)

现在,我们应用上述规则来解析你的例子:

  1. 确定基数(radix)radix = 2。这意味着我们要将字符串当作二进制数字来解析。二进制中有效的数字字符只有 '0' 和 '1'

  2. 开始逐字符解析字符串 "10+15"

    • 第一个字符'1'。这是一个有效的二进制数字。保留。

    • 第二个字符'0'。这是一个有效的二进制数字。保留。

    • 第三个字符'+'这是一个无效的二进制数字字符!

      • 二进制里根本没有 '+' 这个符号。

      • 根据规则,parseInt 会在此处停止解析

  3. 截取有效部分:函数成功解析了 "10" 这两个字符,并忽略了 "+15" 这后面的所有内容。

  4. 转换有效部分:现在,将截取到的二进制字符串 "10" 转换为十进制数字。

    • 二进制 10 等于十进制 (1 * 2^1) + (0 * 2^0) = 2 + 0 = 2

  5. 返回结果:函数返回十进制数字 2

所以,console.log(parseInt("10+15", 2)); 在控制台打印出的结果就是 2

其他关键点和常见陷阱

  1. radix 为 0undefined 或未提供

    • 字符串以 0x 或 0X 开头,会被解释为十六进制

    • 字符串以 0 开头,且无法被解释为十六进制,现代 JavaScript 引擎(ES5之后)会将其解释为十进制。这是一个重要的变化,旧浏览器可能仍会将其当作八进制。

    • 其他情况被解释为十进制。

    • 最佳实践:为了代码清晰和避免意外,请始终明确指定 radix 参数!

    parseInt("0x10"); // 16, 因为以 '0x' 开头,被当作十六进制
    parseInt("010");  // 10, ES5以后是十进制。以前可能是8(八进制)
    parseInt("10");   // 10, 默认十进制// 最佳实践:总是写上基数
    parseInt("010", 10); // 10 (明确指定十进制)
  2. 第一个字符就无法转换

    • 如果字符串的第一个非空字符就无法转换为数字,parseInt 会返回 NaN

    parseInt("Hello", 10); // NaN ('H' 不是数字)
    parseInt("", 10);      // NaN (空字符串)
    parseInt("$100", 10);  // NaN ('$' 不是数字)
  3. 科学计数法

    • parseInt 不会处理科学计数法,它会在 e 或 E 处停止解析。

    parseInt("123e456", 10); // 123 (在 'e' 处停止)
  4. 与 parseFloat() 的区别

    • parseInt 解析整数,遇到非数字字符(包括小数点 .)就会停止。

    • parseFloat 解析浮点数,只认第一个小数点,遇到第二个小数点或非数字字符时停止。

    parseInt("10.5", 10); // 10 (遇到 '.' 停止)
    parseFloat("10.5");   // 10.5parseInt("10.5.6", 10); // 10
    parseFloat("10.5.6");   // 10.5 (在第二个 '.' 处停止)

总结

  • parseInt("10+15", 2) 的结果是 2

  • 原因是:函数以二进制(基数为2)模式解析字符串 "10+15"

  • 它成功解析了前两个有效的二进制数字 "10",然后在无效的 '+' 字符处停止。

  • 二进制 "10" 转换为十进制后就是 2

核心记住:parseInt 是“贪婪”的,但它也很“挑剔”。它会尽可能多地获取有效的数字字符,但一旦遇到无效字符,就立刻停止工作,并返回之前已解析部分的结果。

http://www.dtcms.com/a/341322.html

相关文章:

  • 【java面试day16】mysql-覆盖索引
  • 三分钟速通SSH登录
  • 1.Shell脚本修炼手册之---为什么要学Shell编程?
  • MySQL高阶篇-数据库优化
  • [GraphRag]完全自动化处理任何文档为向量知识图谱:AbutionGraph如何让知识自动“活”起来?
  • ​​pytest+yaml+allure接口自动化测试框架
  • STM32F4 SDIO介绍及应用
  • DNS 深度解析:从域名导航到客户端访问全流程
  • AI 与加密监管思维的转变:从美联储谈到开发者视角
  • Cobbler 自动化部署服务介绍与部署指南
  • SpringBoot集成WebService
  • BioScientist Agent:用于药物重定位和作用机制解析的知识图谱增强型 LLM 生物医学代理技术报告
  • docker CI操作演示分享(第四期)
  • Fastdata极数:中国外卖行业趋势报告2025
  • 网络流量分析——基础知识
  • [特殊字符] 从文件到视频:日常数据修复全攻略
  • 奇怪的“bug”--数据库的“隐式转换”行为
  • Kafka如何保证消费确认与顺序消费?
  • Torch -- 卷积学习day4 -- 完整项目流程
  • python numpy.random的基础教程(附opencv 图片转数组、数组转图片)
  • 3D max制作蝴蝶结详细步骤(新手可跟)♥️
  • 制造业原料仓储混乱?WMS 系统实现物料精准溯源,生产更顺畅_
  • 深度剖析Lua Table的运作方式
  • 透传 Attributes(详细解析)1
  • 服务器内存使用buff/cache的原理
  • Linux-----《Linux系统管理速通:界面切换、远程连接、目录权限与用户管理一网打尽》
  • 以AI技术为核心的变电设备声纹监测装置及方案特色解析
  • AI时代下阿里云基础设施的稳定性架构揭秘
  • 初试Docker Desktop工具
  • 服务器硬件电路设计之 SPI 问答(二):SPI 与 I2C 的特性博弈及多从机设计之道