这个面试题仅一行代码

简介: 今天继续来聊一个面试题,平时上班太忙的同学可以活动活动脑子。这个题目只有一行代码,但是知识点不只一个。当然我们的目的不在于做题,而在于解题的过程。通过一步一步的分析,得出合理的答案。

看题目



1[1,2,3].map(parseInt)

没错,就一行

(如果很清楚了可以到此打住)


相信大家都见过这个题


下面是我的解析,如果有错误恳请留言斧正

解析

1.  Array.prototype.map()

首先要理解下 map 这个函数,他会返回一个新的数组,结果是数组每个元素都会调用下传入 map 的这个函数而得到的返回值


比如:

1var arr = [1,2,3];
2arr.map(x => x * 2);


新的数组的元素都会*2 ,结果是[2,4,6]

好了,我们已经了解了 map 的基本能力。


但是我们发现传入 map 的函数 - parseInt,我们并没有显示的传入参数,可能我们平常的写法是这样的


1[1,2,3].map((item)=>{
2return parseInt(item)
3})


当然这两种写法所得到的结果是不同的。

以下是 mdn 的说明,


40d110bcf4353dcd4f2fc93888111d93_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.jpg


callback 函数会被自动传入三个参数,(当前数组元素,元素索引 index)

原数组本身这个可以忽略了,因为 parseInt只处理前两个参数,后面的参数会忽略。


所以到这里我们能推算出具体的执行代码


1parseInt(1,0);
2parseInt(2,1);
3parseInt(3,2);


2.  parseInt 方法


到这里我们确定了上面代码得结果就可以了。


parseInt的第一个参数我们都知道,也经常用。然而第二个参数我们大多会传10,其他值很少传。


所以这里有两种理解-

a.第二个参数表示第一个参数的格式,是10进制还是2进制的

b.第二个参数表示 parseInt 返回的结果是10进制的,还是2进制的


我不知道有没有人会理解成 b 这个解释,开始学前端的时候我就这么认为的。


这里是官方的说明:

cc1bf2586e4ae4db7701a85f6e0b0af1_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

也可以理解成,parseInt 返回的是10进制的自然数,第二个参数是表示的是第一个参数的格式,也就是基数。


那么什么样的基数是合理的呢?

基数不合理或者第一个参数不是数字,返回结果是什么呢?


1d540540a7ad7f91d7e5a26e4ffab4bc_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.jpg


第二个参数:基数是 在2-36之间


那么到这里答案应该就差不多出来了


1parseInt(1,0); 
2parseInt(2,1);  
3parseInt(3,2);


parseInt(1,0) ;

结果是1,参数0会当做是 false 处理,所以会默认是10进制.

parseInt(2,1);

结果是 NaN,因为基数1不合理  但是文档并没有说明这对返回值的影响,经测试是 NaN.

parseInt(3,2);

结果是 NaN,基数是合理范围内,但是3不是2进制。转换失败,结果是 NaN。


到这里解析完成。


3.  总结

虽然只是一行代码,但是关联知识点很多。

  1. 数组map方法 的能力
  2. 数组 map 方法的参数
  3. parseInt 的能力和理解
  4. parseInt基数的理解
目录
相关文章
|
27天前
|
存储 监控 安全
前端框架的数据驱动方式如何保证数据的安全性?
总之,前端框架的数据驱动方式需要综合运用多种手段来保证数据的安全性。从传输、存储、访问控制到防范攻击等各个方面进行全面考虑和实施,以确保用户数据的安全可靠。同时,不断加强安全管理和技术创新,以应对不断变化的安全挑战。
105 60
|
4月前
|
Java 编译器 C++
【Java基础面试一】、为什么Java代码可以实现一次编写、到处运行?
这篇文章解释了Java能够实现“一次编写,到处运行”的原因,主要归功于Java虚拟机(JVM),它能够在不同平台上将Java源代码编译成的字节码转换成对应平台的机器码,实现跨平台运行。
【Java基础面试一】、为什么Java代码可以实现一次编写、到处运行?
|
2月前
|
JSON 前端开发 Java
震惊!图文并茂——Java后端如何响应不同格式的数据给前端(带源码)
文章介绍了Java后端如何使用Spring Boot框架响应不同格式的数据给前端,包括返回静态页面、数据、HTML代码片段、JSON对象、设置状态码和响应的Header。
161 1
震惊!图文并茂——Java后端如何响应不同格式的数据给前端(带源码)
|
2月前
|
监控 JavaScript 前端开发
前端的混合之路Meteor篇(六):发布订阅示例代码及如何将Meteor的响应数据映射到vue3的reactive系统
本文介绍了 Meteor 3.0 中的发布-订阅模型,详细讲解了如何在服务器端通过 `Meteor.publish` 发布数据,包括简单发布和自定义发布。客户端则通过 `Meteor.subscribe` 订阅数据,并使用 MiniMongo 实现实时数据同步。此外,还展示了如何在 Vue 3 中将 MiniMongo 的 `cursor` 转化为响应式数组,实现数据的自动更新。
|
2月前
|
JSON 分布式计算 前端开发
前端的全栈之路Meteor篇(七):轻量的NoSql分布式数据协议同步协议DDP深度剖析
本文深入探讨了DDP(Distributed Data Protocol)协议,这是一种在Meteor框架中广泛使用的发布/订阅协议,支持实时数据同步。文章详细介绍了DDP的主要特点、消息类型、协议流程及其在Meteor中的应用,包括实时数据同步、用户界面响应、分布式计算、多客户端协作和离线支持等。通过学习DDP,开发者可以构建响应迅速、适应性强的现代Web应用。
|
2月前
|
JavaScript 前端开发 Python
django接收前端vue传输的formData图片数据
django接收前端vue传输的formData图片数据
62 4
|
2月前
|
NoSQL 前端开发 MongoDB
前端的全栈之路Meteor篇(三):运行在浏览器端的NoSQL数据库副本-MiniMongo介绍及其前后端数据实时同步示例
MiniMongo 是 Meteor 框架中的客户端数据库组件,模拟了 MongoDB 的核心功能,允许前端开发者使用类似 MongoDB 的 API 进行数据操作。通过 Meteor 的数据同步机制,MiniMongo 与服务器端的 MongoDB 实现实时数据同步,确保数据一致性,支持发布/订阅模型和响应式数据源,适用于实时聊天、项目管理和协作工具等应用场景。
|
2月前
|
存储 前端开发 API
前端开发中,Web Storage的存储数据的方法localstorage和sessionStorage的使用及区别
前端开发中,Web Storage的存储数据的方法localstorage和sessionStorage的使用及区别
115 0
|
2月前
|
前端开发 Java 数据库
springBoot:template engine&自定义一个mvc&后端给前端传数据&增删改查 (三)
本文介绍了如何自定义一个 MVC 框架,包括后端向前端传递数据、前后端代理配置、实现增删改查功能以及分页查询。详细展示了代码示例,从配置文件到控制器、服务层和数据访问层的实现,帮助开发者快速理解和应用。
|
4月前
|
存储 缓存 Java
面试问Spring循环依赖?今天通过代码调试让你记住
该文章讨论了Spring框架中循环依赖的概念,并通过代码示例帮助读者理解这一概念。
面试问Spring循环依赖?今天通过代码调试让你记住