我正在参加一个webDev课程,我们要做的任务之一是计算一个年龄是否是一个完美的正方形。看到学生提出的一些不同的解决方案,我对实际表现感到好奇,所以我写了一个小测试,看看它们是如何相互叠加的,结果是对数学调用最多的那个。功能是最快和最快的。
以下是功能:
var func1 = function(age){
var ageSq = Math.floor(Math.sqrt(age)) * Math.floor(Math.sqrt(age));
return ageSq === age;
}
var func2 = function(age){
return Math.sqrt(age) % 1 === 0;
}
var func3 = function(age){
return Number.isInteger(Math.sqrt(age));
}
var func4 = function(age){
return (parseInt(Math.sqrt(age)) * parseInt(Math.sqrt(age)) == age)
}
运行100,000个整数数组中的每一个,从每个整数的0-99总时间运行3次:
[4.405000000000015, 8.625000000000014, 10.54000000000002, 7.895000000000039]
[3.989999999999807, 6.310000000000002, 6.780000000000001, 6.444999999999993]
[3.584999999999795, 13.98500000000014, 11.47999999999999, 9.965000000000003]
正如你所看到的那样,第一个速度要快得多 - 但只要查看代码,我就会猜到它会是最慢的。任何想法在引擎盖下发生了什么?