IT技术博客大学习 共学习 共进步

奇淫技巧和西天取经

Taobao.com UED Team 2009-10-13 22:58:04 累计浏览 1,663 次
本机暂存

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

实现一:

/* 平淡无奇法 */
function pad(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);
}

神奇的递归,每次都能让 mm 投来赞美和钦慕的眼神~~

然而,高手过招,讲究的是一招致命。上面的代码居然用了两行,简直是侮辱。琢磨一下,一行神奇的代码涌上心头:

/* 奇淫技巧法 */
function pad3(num, n) {
    return (Array(n).join(0) + num).slice(-n);
}

这次 mm 投来的是膜拜的眼神了,hiahia~~~

=== 我不是空间分隔线,我是很长很长的时间分割线。经历了 n 年后 ===

一日,秋高气爽,心旷神怡。与友闲坐菩提树下,把酒下棋。

友曰:BP 君,自从你走后,可害苦了我。你留下的那些神奇代码,害我头发提前掉了 3 年。

我大惊:此话怎讲?

友一脸不堪回首:记得那个神奇的 pad3 函数不?在你走后 1 年内,公司的业务激增。pad3 有个 bug, 某些情况下会截取掉数字的前几位。比如 pad3(123456, 5), 返回的是 23456. 这 bug 被黑客发现了,导致了好几起大规模的钓鱼事件,公司损失上百万。当时老总勒令我一天内找出 bug 所在,老兄你的神奇代码却害得我花了 3 天才定位到。除了 pad3, 还有一个神奇的 xxoo9 函数,当时……

老友还在絮絮叨叨,我听完第一段时,已黯然失魂。低头琢磨 pad3 的写法,的确存在截取 bug, 这用在交易系统,狂汗……

与老友话别后,迫不及待地从 GoogleFace 的一朵云中取回当年的 pad3 和 xxoo9 等代码,一测试,大惊:

tricky_code.html

pad3 不仅存在截取字符 bug, 居然还有性能问题……

一番激烈的思想斗争。

迷迷茫茫中,遥见唐僧笑侃而至:

世人皆笑我罗嗦,我道世人看不透。
欲解此惑看来时,质朴简单是真知。

唐僧抛下一卷轴,大笑而去:

/* 质朴长存法 */
function pad(num, n) {
    var len = num.toString().length;
    while(len < n) {
        num = "0" + num;
        len++;
    }
    return num;
}

观之,吾亦大笑,随唐僧取经去也……

注:一直想写这样一篇文章。今天闲逛 51js, 偶然看到一贴:位数不够前面补 0 的问题,于是立刻就有了这篇文章的构思。对于补零,我的奇淫反应是return Array(n - ("" + num).length + 1).join(0) + num;(也有 bug),和果果的类似,但考虑到震撼性(果果的 bug 更隐蔽),最后采用了果果的代码来举例。无论如何,感谢果果。

建议继续学习

  1. JQuery实现Excel表格呈现 (累计阅读 48,261)
  2. 深入理解Javascript之执行上下文(Execution Context) (累计阅读 18,261)
  3. 从输入 URL 到页面加载完成的过程中都发生了什么事情? (累计阅读 15,801)
  4. 图片动态局部毛玻璃模糊效果的实现 (累计阅读 14,760)
  5. 天朝第二代身份证号码的验证机制 (累计阅读 14,681)
  6. 为什么你写不好一个快速排序? 谈程序员的职业发展 (累计阅读 14,342)
  7. HTML 5 的data-* 自定义属性 (累计阅读 14,240)
  8. 分享一个JQUERY颜色选择插件 (累计阅读 14,140)
  9. 什么是全栈工程师? (累计阅读 13,940)
  10. 快速排序(Quicksort)的Javascript实现 (累计阅读 11,641)