分析如下:
接受参数为number的话,返回其本身
接受参数非number && 非string的话,返回NaN
接受参数为string的话,第一位为0的话,返回0,一直解析到非number的为止
自动去除开始的空格
支持链式调用,即封装到string的原型上
根据分析,代码如下:
String.prototype.parseInt = function () {
if (typeof this === "number") {
return this;
} else if (typeof this === "string") {
let newStr = this.replace(/\s*/, '');
if (!newStr.length) {
return NaN;
} else if (!Number.isFinite(newStr[0] * 1)) {
return NaN;
} else if (newStr[0] === 0) {
return 0;
} else {
let arr = [];
for (let list of newStr) {
if (list !== '' && Number.isFinite(list * 1)) {
arr.push(list);
} else {
break;
}
}
if (arr.length) {
return arr.join("");
} else {
return NaN;
}
}
} else {
return NaN;
}
}