解析JS参数parseInt('012', 16)和parseInt(012, 16)是否相等

目录
  • 引言
  • 一、parseInt()的使用说明
    • 1.1 解析数字和字母的混合字符串
    • 1.2 用于浮点数的取整:
    • 1.3 将其他的进制转化为十进制
    • 1.4 parseInt中的隐式转化
  • 二、经典面试题

引言

parseInt('012', 16)和parseInt(012, 16)相等吗?

["10", "10", "10", "10", "10"].map(parseInt)的结果是什么?

先来一起复习一下parseInt()的基本用法。

一、parseInt()的使用说明

使用参数说明:paraseInt(value: string, radix?: number)

parseInt()是对Number()很好的补充

1.1 解析数字和字母的混合字符串

Number()返回的都是NaN的时候,parseInt()有不一样的解析结果。parseInt会忽略无效字符,如果第一个字符串元素就非数字,那么就返回NaN

Number('123abc') // NaN
Number('123asd1') // NaN
Number('ad123') // NaN
// -------
parseInt('123abc') // 123
parseInt('123asd1') // 123
parseInt('123---8979$$$') // 123
parseInt('ad123') // NaN

1.2 用于浮点数的取整:

console.log(parseInt(11.22)) // 11
console.log(Number(11.22)) // 11.22

1.3 将其他的进制转化为十进制

  • 标准格式: parseInt(string, radix)
  • radix: 表示字符串的基数,取值范围是从 2 到 36。16 就表示被解析值是十六进制数。
  • 计算方法:基数 * (radix ^ (当前位数 - 1)) 然后依次相加

如下例子:

console.log(parseInt(101, 2)) // 5
console.log(parseInt(123, 5)) // 38
parseInt('6axxx', 16) // 106

parseInt('6axxx', 16), 16进制能够识别6a,到x为止。

其转化的过程如下:

需要注意的是:

  • radix的默认值不一定是10,如果字符串 string 以其它任何值开头,则基数才是10 (十进制)。

这玩意儿很智能.输入的如果是标准的16进制或者8进制的话,就可以把radix初始化为对应的进制的值。比如说parseInt(0xfff) 的结果是4096,不用放入radix值。

但是如果,你后面非要加非16进制的制位的话,那还是会按照对应的radix来计算。比如parseInt(012, 3)是3而不是8。

1.4 parseInt中的隐式转化

parseInt('012', 16)和parseInt(012, 16)的结果是否一致呢?

我们打印结构如下:

前者是18,后者是16!, why?

很简单,其实通过我这个小标题也能够知道原因。因为parseInt(012, 16)发生了隐式转化。第一参数是string类型,而它是number类型,构成了隐式转化的条件,触发了toString()的规则。

012.toString()结果为10.

所以说

parseInt(012, 16) = parseInt('10', 16).

1×(161)+0×(160)=161 \times(16^1)+0\times(16^0)=161×(161)+0×(160)=16

二、经典面试题

下面的输出结果是什么?

["10", "10", "10", "10", "10"].map(parseInt);

我们需要有这么一个认知:

  • map是一个函数
  • map的的参数有两个,一个函数callbackFn,一个可选对象thisArg,用于执行前者用作this值。
  • map的的参数函数有三个参数:currentValueindexarray
  • parseInt就是一个函数

所以说,什么的题目等于下面代码片段:

["10", "10", "10", "10", "10"].map((item, index) => {
  return parseInt(item, index)
})

由此可得:

parseInt('10', 0) // 10
parseInt('10', 1) // NaN
parseInt('10', 2) // 2
parseInt('10', 3) // 3
parseInt('10', 4) // 4

那么我们根据上面的描述,一起来讨论[1, 2, 3, 4].map(parseInt)的结果是什。

以上就是解析parseInt('012', 16)和parseInt(012, 16)是否相等的详细内容,更多关于parseInt('012', 16) parseInt(012, 16)的资料请关注我们其它相关文章!

(0)

相关推荐

  • JavaScript parseInt0.0000005打印5原理解析

    目录 前言 1.什么时候使用parseInt? 2.关于parseInt的一些事情 语法 例子 3. parseInt 是如何转换数字的? 3.1 第一步?将数字转换为字符串 3.2 第二步,做舍入操作 4. 如何安全获取浮点数的整数部分? 5. 举一反三 前言 最近,我在开发项目时遇到了一个奇怪的问题,parseInt (0.0000005) === 5.通常,输出 0 才是正确的,但为什么是 5?让我们一起探讨这个问题. 1.什么时候使用parseInt? 首先,您通常什么时候使用parse

  • JS面试题解['1', '7', '11'].map(parseInt) 输出

    目录 输出结果 map函数有问题? 会不会是传入的 parseInt 出现问题 ? 输出结果 ['1', '7', '11'].map(parseInt) // 结果输出 -> [1, NaN, 3] 为什么输出会有 NaN ? 为什么把 11 转成整数会是 3 ? 想把数组里的字符串数字转换成整数,于是使用 map函数来对数组的每一项作用,作用的函数是 parseInt函数,所以预期的结果应该是[1,7,11] ,然而最终浏览器的 JavaScript 引擎给出的答案是 [1, NaN, 3]

  • Js中parseInt的使用及注意事项

    目录 start 回顾一下map 学习一下 parseInt 总结: 总结 start 先看一个题目['1','2','3'].map(parseInt) 乍一看,我写下答案:[1,2,3] 控制台运行:['1',NaN,NaN] 为什么?map函数我很熟悉了,那么问题出在哪里?大概率出在 parseInt上了 回顾一下map map() 方法创建一个新数组,这个新数组由原数组中的每个元素都调用一次提供的函数后的返回值组成.总共就两个参数,一个是回调函数,一个是指定对应的this. 1.第一个参

  • 关于JavaScript中parseInt()的一个怪异行为解决

    目录 1. parseInt() 中的一个怪异行为 2.解决 parseInt() 该怪异行为 3. 总结 parseInt() 是一个内置的 JavaScript 函数,它可以将数字字符串解析为整数.比如,我们将数字字符串 '100' 解析为整数: const number = parseInt('100'); number; // 100 如预期那样,'100' 被解析为整数 100. parseInt(numericalString, radix) 也接受第二个参数:radix(基数),另

  • JavaScript parseInt()与Number()区别案例详解

    学习目标: parseInt().Number()这两个函数用到最多的地方就是把一个字符串转换成数据类型,那么他们都有哪些区别? 学习内容: parseInt()函数将给定的字符串以指定的基数解析为整数. parseInt(string,radix) 第二个参数表示使用的进制,我们一般使用10进制,也可能会有到8或者16进制.为了避免对"0"和"0x"开头的字符串解析错误,各种javascript编程规范都规定必须要明确给出第二个参数的值,如parseInt(&qu

  • 浅谈JavaScript中的parseInt()的妙用

    起因 写这篇博客的起因是今天在刷leetcode的每日一题,是一道字符串转换整数 (atoi)的题,感兴趣的话可以点击题目名称去看一下具体描述.在我多次debug终于成功提交之后,去评论区看了一下大佬们的解题思路,看完之后不禁感叹javascript中原来parseInt( )已经这么优秀了啊.这告诉我了一个道理,我们自认为再熟悉不过的api,可能我们并没有真正意义上的掌握." 我的解答 /** * @param {string} str * @return {number} */ var my

  • 解析JS参数parseInt('012', 16)和parseInt(012, 16)是否相等

    目录 引言 一.parseInt()的使用说明 1.1 解析数字和字母的混合字符串 1.2 用于浮点数的取整: 1.3 将其他的进制转化为十进制 1.4 parseInt中的隐式转化 二.经典面试题 引言 parseInt('012', 16)和parseInt(012, 16)相等吗? ["10", "10", "10", "10", "10"].map(parseInt)的结果是什么? 先来一起复习一下

  • 深入解析JS实现3D标签云的原理与方法

    本文实例讲述了深入解析JS实现3D标签云的原理与方法.分享给大家供大家参考,具体如下: 最近开始用canvas搞3D了,搞得也是简单的东西,就是球体转圈.做出来后,突然想起以前看过的3D标签云,在以前觉得真心狂拽酷炫叼啊,当时也确实不知道怎么在平面上模拟3D,所以也就没去搞了.现在刚好用了canvas搞3D,也发现,好像3D标签云也差不多,然后就写了一下. 具体怎么做呢,先说一下原理,3D标签云就是做一个球面,然后再球面上取均匀分布的点,把点坐标赋给标签,再根据抽象出来的Z轴大小来改变标签的字体

  • 全面解析JS字符串和正则表达式中的match、replace、exec等函数

    正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串.将匹配的子串做替换或者从某个串中取出符合某个条件的子串等. 正则表达式由于不经常使用,所以容易经常忘记,下面小编把常用的函数和功能,简明扼要的罗列在此,以备日后查看: RegExp对象的函数常用的有2个 1.test函数 用法:RegExpObject.test(string) 返回:如果字符串 string 中含有与 RegExpObject 匹配的文本,则返回 true,否则返回

  • 解析js中获得父窗口链接getParent方法以及各种打开窗口的方法

    复制代码 代码如下: //打开模态窗口function dialog(obj){if(obj.url == undefined || obj.url == null){throw new Error("please set obj.url");}var url = obj.url;if(url.indexOf("?")!=-1){url = url+ "&r_=" + Math.random();}else {url = url+ &qu

  • 基于webpack.config.js 参数详解

    webpack.config.js文件通常放在项目的根目录中,它本身也是一个标准的Commonjs规范的模块. var webpack = require('webpack'); module.exports = { entry: [ 'webpack/hot/only-dev-server', './js/app.js' ], output: { path: './build', filename: 'bundle.js' }, module: { loaders: [ { test: /\.

  • Python 使用 docopt 解析json参数文件过程讲解

    1. 背景 在深度学习的任务中,通常需要比较复杂的参数以及输入输出配置,比如需要不同的训练data,不同的模型,写入不同的log文件,输出到不同的文件夹以免混淆输出 常用的parser.add()方法非常占用代码空间,而且输入输出配置无法通过文件更改,只能通过命令行参数改变. docopt 库提供了一个非常优雅的命令行解析工具,这边只介绍其中解析文件参数 2. 安装 pip install docopt import docopt import json 3. 使用 docopt 由两部分组成,

  • Js参数RSA加密传输之jsencrypt.js的使用

    注意几点: 1.参数传递的+号处理,在传输时会把+变成空格,不处理后端就报错了. 1.前端代码 <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <title>Login</title> <script src="~/Scripts/jquery-1.10.2.m

  • Nest.js参数校验和自定义返回数据格式详解

    0x0 参数校验 参数校验大部分业务是使用 Nest.js 中的管道 方法实现,具体可以查阅文档 .不过编写过程中遇到一些问题,虽然文档讲得比较晦涩. 在做个查询接口,里面包含一些参数,做成 dto 结构数据: import { ApiProperty } from '@nestjs/swagger' export class QueryUserDto { @ApiProperty({ required: false, description: '页码' }) readonly currentP

  • 简单聊一聊Node.js参数max-old-space-size

    目录 前言 设置环境变量 命令行方式 第三种方式,基于项目 总结 前言 Old space是 V8 托管(也称为垃圾收集)堆(即 JavaScript 对象所在的位置)中最大和最可配置的部分,而 --max-old-space-size 标志控制其最大大小. 随着内存消耗接近极限,V8 将花费更多时间在垃圾收集上,以释放未使用的内存. 如果堆内存消耗(即 GC 无法释放的活动对象)超过限制,V8 将使您的进程崩溃(因为缺乏替代方案),因此您不想将其设置得太低. 当然,如果您将其设置得太高,那么

  • JSP中js传递和解析URL参数以及中文转码和解码问题

    1.传递参数: 复制代码 代码如下: var pmt = 'sensor='+ encodeURI(encodeURI(sensor))+'&device='+encodeURI(encodeURI(device))+'&instrument='; pmt += encodeURI(encodeURI(instrument))+'&n='+n+'&addDate='+addDate; top.location.href = 'jsp/print/diagnosticAnaP

随机推荐