Number.isInteger

今天看到了一道题,是给Number.isInteger写一个polyfill

Number.prototype.isInteger = function (target) {
    if (Number.isInteger) {
        return Number.isInteger(target);
    }
    if (typeof target !== 'number') {
        return false;
    }
    if (parseInt(target, 10) !== target) {
        return false;
    }
    return true;
}

这个是我写的,问题还是比较严重的。
parseInt这个方法用在这里非常不合适。

parseInt(2 ** 60, 10); //1
parseInt(2 ** -60, 10); //8

parseInt会先调用toString方法。

2 ** 70 // 1.1805916207174113e+21
2 ** -70 // 8.470329472543003e-22

所以这里使用parseInt是不明智的,可以使用Math.ceil(),向上取整。

阅读更多

没有更多推荐了,返回首页