疯狂的JavaScript

题目:用 JavaScript 代码实现空位补零,比如 pad(12, 3) => 012

标准写法
function pad0(num, n) {
    var len = num.toString().length;
    while(len < n) {
        num = "0" + num;
        len++;
    }
    return num;
}
 
缩减为3行功能代码
function pad1(num, n) {
    var i = (num + "").length;
    while(i++ < n) num = "0" + num;
    return num;
}
 
再减
function pad2(num, n) {
    if ((num + "").length >= n) return num;
    return pad2("0" + num, n);
}
 
再来
function pad3(num, n) {
    return (Array(n).join(0) + num).slice(-n);
}
 
问题来了,代码少了,bug来了,效率问题也来了
看看下面的测试代码
var testNum = 12, testNum2 = 123456789, testPad = 7;
println(pad0(testNum, testPad));
println(pad0(testNum2, testPad));
依次输出, 然后加上测试
   
    var N = 50000, start;
    for (var i = 0, c; c = ["pad0","pad1", "pad2", "pad3"][i++]; ) {
        start = +new Date;
        for (var j = 0; j < N; ++j) {
            window[c](12, 3);
        }
        println(c + " time: " + (+new Date - start));
    }
 
    function println(msg) {
        document.write(msg + "<br />");
    }
 
输出的结果如下
0000012
123456789
0000012
123456789
0000012
123456789
0000012
3456789
pad0 time: 2402
pad1 time: 2287
pad2 time: 2312
pad3 time: 2647
可以看到, 前三种写法的输出都是正确的,但是最后一种存在bug, 效率上讲, 第二种最好,其次是第三种, 最后一个成绩最差
所以,代码也不是越少越好的
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值