Firefox 9.0.1 在 n 很小时,使用 Ω(n) 的循环方法超越了我的 Ω(log n) 数字补零算法,这让我感到惊讶。在其他所有我见过的浏览器中,循环都比较慢,即使对于小值 n 也是如此。我知道所有的浏览器都在优化 JavaScript,但既然其他现代浏览器都显示循环更慢,那么是否有解释 Firefox 9 行为的原因呢?
// Ω(log n)
function padNumberMath(number, length) {
var N = Math.pow(10, length);
return number < N ? ("" + (N + number)).slice(1) : "" + number
}
// Ω(n):
function padNumberLoop(number, length) {
var my_string = '' + number;
while (my_string.length < length) {
my_string = '0' + my_string;
}
return my_string;
}
更新:我不认为这与原问题有关,但我刚刚发现当从32位模式切换到64位模式时,IE 9会改变行为。在32位模式下,Math方法胜出,在64位模式下,Loop方法胜出。只是想指出这一点。
更新2:MAK在他下面的评论中纠正了我。数学方法不是Ω(1),可能更像是Ω(log n)。