您的位置:首页 > Web前端 > JavaScript

JS中parseINT()函数的使用技巧

2018-03-21 11:41 477 查看
在使用map函数将数字字符数组转换为数字(程序如下),发觉输出为10,NaN,2。

'use strict';
var arr = ['1', '2', '3'];
var r = arr.map(parseInt);
console.log(r);


我们期望代码段
['1', '2', '3'].map(parseInt);
输出结果为[1, 2, 3],但实际输出的是[1,NaN, NaN],

查看官方文档,可以发现:parseInt 通常使用一个参数,但实际传入的是两个,第一个是要被转换的字符串,第二个是基数,在这个回调函数中,
Array.prototype.map
传入了三个参数,分别是 数组的元素、索引、和数组名本身,parseInt忽略了第三个参数,但保留着第二个参数,因此产生了这样的错误输出。

使用如下代码进行验证:

function newParseInt(a, b, c){
console.log("result" + "a: " + a);
return parseInt(a, 10);
}

var xs = ['10', '1', '2'];

xs = xs.map(newParseInt);
/*
输出结果为:
console.log(xs);
resulta: 10
resulta: 10
resulta: 10
(3) [10, 1, 2]
因此验证了上述说法
*/


function returnInt(element) {
return parseInt(element, 10);
}


//这段代码正确的输出了[1, 2,  3];
console.log(['1', '2', '3'].map(returnInt)); // [1, 2, 3]


//使用简洁的箭头函数同样课得到正确的结果
console.log(['1', '2', '3'].map( str => parseInt(str) ));


// 另一个转换方法:
['1', '2', '3'].map(Number); // [1, 2, 3]


不像
parseInt
Number
还会返回浮点数或者科学计数法

['1.1', '2.2e2', '3e300'].map(Number); // [1.1, 220, 3e+300]


使用
map
方法调用
parseInt
,使
parseInt
作为
map
的一个参数的代码如下:

var xs = ['10', '10', '10'];

xs = xs.map(parseInt);

console.log(xs);


他的输出为 10,NaN,2, 基于上述描述,就不会感到意外了。

参考:Array.prototype.map()的文档
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  javascript parseInt