我试图找到一个更快的== or ===
。
我对答案不感兴趣,我想知道如何测试它。
我创建了一个要测量的代码,但是两者之间的差异是如此之近,所以我无法证明答案。
我更改了CPU速度,然后运行此代码。但是每次都显示出不同的价值。仍然不确定哪一个更快。
let B = new Array(1000000).fill(3);
console.time("teste 2 ");
test2(B);
console.timeEnd("teste 2 ");
console.time("teste 3 ");
test3(B);
console.timeEnd("teste 3 ");
function test2(B) {
for (i in B) {
if (NaN == B[i]) { }
}
}
function test3(B) {
for (i in B) {
if (NaN === B[i]) { }
}
}
答案 0 :(得分:3)
要找出是否存在显着差异(在这种情况下,没有¹),如果有,那么更快(在这种情况下,两者都没有),您需要再进行很多次迭代,以及更多的测试运行。当测量非常非常小的物体时,您需要大量数据才能使信号上升到高于噪声的水平。
确保您可以在计算机上关闭的所有后台进程都已关闭,然后对每个版本的代码运行数千次迭代,在它们之间交替进行。
我还建议您测试不是特殊情况的东西。比较中的NaN
是一种特殊情况:比较总是为假。因此,我将测试NaN
和除3
之外的一些数字,而不是针对3
测试3
。
有些工具可以帮助您完成此任务。 jsPerf.com是最著名的之一。 Here's a test I did there。但是,即使jsPerf都专注于在合理的时间段(不到一分钟)内获得结果,而正确的测试以检测到很小的差异可能要花费几分钟甚至几小时。
But :==
和===
之间的任何差异都将是如此之小,根本没有必要对其进行测试。几乎可以肯定,您有更大的鱼可以油炸。
¹为什么没有区别?因为您要比较的两件事都是number
,所以比较的作用完全相同。您可能已经听说===
比==
更快的说法是基于==
将不同类型的操作数强制转换为普通类型这一事实。当不需要强制/转换时,==
和===
会做完全相同的事情。