练习
请把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字。输入: ['adam', 'LISA', 'barT'] ,输出: ['Adam', 'Lisa', 'Bart'] 。
'use strict';
function normalize(arr) {
return [];
}
// 测试:
if (normalize(['adam', 'LISA', 'barT']).toString() === ['Adam', 'Lisa', 'Bart'].toString()) {
alert('测试通过!');
}
else {
alert('测试失败!');
}
小明希望利用 map() 把字符串变成整数,他写的代码很简洁:
'use strict';
var arr = ['1', '2', '3'];
var r;
r = arr.map(parseInt);
alert('[' + r[0] + ', ' + r[1] + ', ' + r[2] + ']');
结果竟然是 [1, NaN, NaN] ,小明百思不得其解,请帮他找到原因并修正代码。
提示:参考 Array.prototype.map()的文档 。
<button id="x-why-parseInt-failed" class="uk-button uk-button-success">原因分析</button>
由于 map() 接收的回调函数可以有3个参数: callback(currentValue, index, array) ,通常我们仅需要第一个参数,而忽略了传入的后面两个参数。不幸的是, parseInt(string, radix) 没有忽略第二个参数,导致实际执行的函数分别是:
parseInt('0', 0); // 0, 按十进制转换
parseInt('1', 1); // NaN, 没有一进制
parseInt('2', 2); // NaN, 按二进制转换不允许出现2
可以改为 r = arr.map(Number); ,因为 Number(value) 函数仅接收一个参数。