我有两个函数实现,它们获取数组的最后一个元素。
function first(array) {
var length = array ? array.length : 0;
return length ? array[length - 1] : undefined;
}
function second(array) {
return array ? array[array.length - 1] : undefined;
}
第二个函数处理完整数组的速度比第一个快,但处理空数组的速度慢。为什么以及如何修复它?
完整数组的基准:http://jsperf.com/lodash-f-last/
空数组基准测试: http://jsperf.com/lodash-f-last/2
最佳答案
如果您希望您的代码运行得更快,您永远不应该越界读取:V8 去优化执行该操作的代码。
在您的 second
函数中,您正是这样做的 - 您读取了边界。而是在阅读之前进行边界检查:
function xlast(array) {
return (array && array.length > 0) ? array[array.length - 1]
: undefined;
}
关于javascript - 为什么一个函数在满数组时比在空数组时工作得更快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29630600/