廖雪峰老师的js中有一个练习:不要使用JavaScript内置的parseInt()函数,利用map和reduce操作实现一个string2int()函数:
'use strict';
function string2int(s) {
return s.split('').map(x=>x*1).reduce((x,y)=>x*10+y);
}
// 测试:
if (string2int('0') === 0 && string2int('12345') === 12345 && string2int('12300') === 12300) {
if (string2int.toString().indexOf('parseInt') !== -1) {
console.log('请勿使用parseInt()!');
} else if (string2int.toString().indexOf('Number') !== -1) {
console.log('请勿使用Number()!');
} else {
console.log('测试通过!');
}
}
else {
console.log('测试失败!');
}
要求不使用parseInt()函数,这个地方就用到了隐式类型转换,x是字符串,x*1结果为Number。
- -、*、/、%
将操作数转换为Number,无法转换为数字时结果是NaN - < > <= >= == != 比较运算符
数字和字符串比较大小时,会隐示将字符串转换成Number类型进行比较。
字符串和字符串比较大小时,则比较的是ascii码的大小。最后返回的则是布尔值 - +号
操作数中有字符串时,+用于字符串连接;
操作数中没有字符串时,+用于将操作数转换为Number,再进行运算