I thought this would be as easy as:
if(typeof(Array.push) == \'undefined\'){
//not defined, prototype a version of the push method
// Firefox never gets
The proper way to check if a property exists:
if ('property' in objectVar)
First of all, typeof is an operator, not a function, so you don't need the parentheses. Secondly, access the object's prototype.
alert( typeof Array.prototype.push );
alert( typeof Array.prototype.foo );
When you execute typeof Array.push
you are testing if the Array object itself has a push method, not if instances of Array have a push method.
And it does work fine in Firefox
That's only by coincidence! You can't generally expect a prototype's method to also exist on the constructor function.
if(typeof(Array().push) == 'undefined')
This was nearly right except you forget new
, a perennial JavaScript gotcha. new Array().push
, or [].push
for short, would correctly check an instance had the method you wanted.
The .hasOwnProperty
can be accessed on the Array's proptotype, if typeof
is not idiomatic enough.
if (Array.prototype.hasOwnProperty('push')) {
// Native array has push property
}