我刚刚阅读this answer regarding hashing in Javascript,虽然它肯定比接受的答案快,但它需要reduce
原型上的Array
功能。
检查reduce
函数是否存在很容易;但是,虽然我做了(并且已经看过)大多数检查对原型进行检查,但它让我想知道:检查实例本身有什么含义?为什么原型检查似乎更受欢迎?
// i.e.
if (!!Array.prototype.reduce) { }
// vs
if (!![].reduce)
实例肯定需要一个实例,所以这是一回事,但是它是吗?
答案 0 :(得分:3)
刚刚运行了一个基准:http://jsperf.com/prototype-vs-instance-property-check
由于空数组的实例化, Array.prototype.reduce
快3倍,但实际上,由于这些检查几乎总是一次性检查,因此绝对没有区别,而不是始终运行的代码。 / p>
我个人已经将此缩减为[].method
多年。我对Array.prototype.slice.call( .. )
与[].slice.call( ... )
之类的内容采取了同样的做法,并且这些内容的调用次数远远超过一次。
但请注意,这仅适用于Array
,因此您实际上并没有节省太多。
答案 1 :(得分:2)
第二个版本涉及不必要地实例化一个空数组。为什么这样做,什么时候你可以问原型本身而不是实例化任何东西?