关于Array的map方法中回调函数参数的问题
开门见山,我们先来看两个例子。
var arr=['1','4','9','16'];
var r=arr.map(Math.sqrt);
猜猜r的结果会是多少?
没错就是
[1,2,3,4]
我们再来试试另一个,
var arr=['1','4','9','16'];
var r=arr.map(parseInt);
再猜猜结果是多少?
是[1,4,9,16]?
console试一试看看结果是多少
[1,NaN,NaN,1]!
是不是大吃一惊
其实真相————
就是参数个数搞的鬼!
让我们再来看一个例子
var arr=['1','4','9','16'];
var r=arr.map(function(x){return parseInt(x)});
r//[1,4,9,16]
结果是不是就正常了!
其实在调用
arr.map(parseInt);的时候
传给map的参数有三个
当前的值(currentValuve)//依次是'1','4','9','16'
当前值的索引(currentIndex)//依次是0,1,2,3
以及当前数组(currentArray)//['1','4','9','16'],每次都是这个
而每次使用parseInt()函数的时候,却只传入了两个值(currentValue,currentIndex)
所以结果就是:
parseInt('1',0)//1
而第二个参数假如经过 Number 函数转换后为 0 或
NaN,则将会忽略。——Mozilla官方文档
parseInt('4',1)//非法,NaN
parseInt('9',2)//非法,NaN
parseInt('16',3)//这里值得注意,在解析字符串'16'的时候,发现6大于或等于3,所以其后的数字都被忽略,只剩下一个1返回了
如果
parseInt遇到了不属于radix参数所指定的基数中的字符那么该字符和其后的字符都将被忽略。——Mozilla官方文档
最后知道真相的我们以后可千万得注意map函数中回调参数个数的问题啊!
var r=arr.map(function(x){return parseInt(x)});
关于Array的map方法中回调函数参数的问题的更多相关文章
- ajax中的post方法中回调函数不执行的问题
前一段时间接触了JQuery Ajax中的.post()方法和.get()方法,感觉到ajax的简洁和强大,当用到.post()方法时,去W3上查找相关的使用方法,感觉十分简单,用法很明了,然后,直接 ...
- Vue -- mounted方法中调用methods的方法(并取出mounted方法中回调函数的值)
结果:
- array_reduce方法用回调函数迭代地将对数组的值进行操作
在处理php数组的时候,有一种需求特别的频繁,如下二维数组: $arr = array( 1=>array( 'id' => 5, 'name' => '张三' ), 2=>a ...
- [js]js中回调函数
//回调函数: 把一个函数当参数传给另个函数 /* function f1() { console.log('f1'); } function f2(f) { f(); console.log(1); ...
- JavaScript中回调函数的使用
在JavaScript中,回调函数具体的定义为:函数A作为参数(函数引用)传递到另一个函数B中,并且这个函数B执行函数A.我们就说函数A叫做回调函数.如果没有名称(函数表达式),就叫做匿名回调函数. ...
- C++中回调函数(CallBack)的使用
如果试图直接使用C++的成员函数作为回调函数将发生错误,甚至编译就不能通过. 其错误是普通的C++成员函数都隐含了一个传递函数作为参数,亦即“this”指针,C++通过传递this指针给其成员函数从而 ...
- qt 中回调函数的实现
在QT中回调函数主要可以实现多态性,通过回调函数可以动态处理一些操作.在多线程中,当同时需要处理多个事务的时候,显然你会去创建多个线程类然后实例化,这显然会增加开发工作,当我们在线程类中加入一个回调函 ...
- $.getJSON('url',function(data){}) 中回调函数不执行
$.getJSON('url',function(data){}) 中回调函数不执行 url 中的 json 格式不正确 ,浏览器返回并没有报错 {'湖北':[114.11438,30.849429] ...
- Windows编程中回调函数的使用心得(MFC篇)
回调函数就是一个通过函数指针调用的函数.如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数.回调函数不是由该函数的实现方直接调用,而是在特定 ...
随机推荐
- iOS - 静态库的创建与使用
在日常项目开发中,不论是为了两个公司项目上的业务交流还是为了减少项目的编译时间,有的时候我们会把项目中的私密内容打包成静态库,或者是把项目中变动较少一部分打包成静态库以便提高编译效率,那么下面我们就来 ...
- iOS开发:创建真机调试证书及描述文件
iOS开发:创建真机调试证书及描述文件 关于苹果iOS开发,笔者也是从小白过来的,经历过各种困难和坑,其中就有关于开发证书,生产证书,in_house证书,add_Hoc证书申请过程中的问题,以及上架 ...
- git与github安装、配置、pull、push
操作系统是Ubuntu 16.04 LTS 64bit 1 安装git (1)安装 sudo apt-get install git-core (2)一些全局变量的初始化 在本地建立一个文件夹,然后做 ...
- Jsoup问题---获取http协议请求失败 org.jsoup.UnsupportedMimeTypeException: Unhandled content type. Must be text/*, application/xml, or application/xhtml+xml.
Jsoup问题---获取http协议请求失败 1.问题:用Jsoup在获取一些网站的数据时,起初获取很顺利,但是在访问某浪的数据是Jsoup报错,应该是请求头里面的请求类型(ContextType)不 ...
- [AC自动机]【学习笔记】
Keywords Search Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)To ...
- BZOJ 3289: Mato的文件管理[莫队算法 树状数组]
3289: Mato的文件管理 Time Limit: 40 Sec Memory Limit: 128 MBSubmit: 2399 Solved: 988[Submit][Status][Di ...
- 时隔一年再读到the star
The Star Arthur C. Clarke It is three thousand light-years to the Vatican. Once, I believed that spa ...
- Subsets
Given a set of distinct integers, nums, return all possible subsets. Note: The solution set must not ...
- OSG 3.40编译,osgQt编译失败解决方案
osgQt编译不出来,主要原因在于cmake配置不正确. 第一步:修改CMakeList.txt文件,在文件开始加入两行 " CACHE STRING "") set(C ...
- 解读ASP.NET 5 & MVC6系列(10):Controller与Action
我们知道在MVC5和之前的版本,两个框架的生命周期是不一样的,在新版MVC6中,MVC Controller/Web API Controller已经合二为一了,本章我们主要讲解Controller和 ...