They'll never1 lead to different results, which is why both of them are considered correct.
The object {}
always inherits from the object prototype and has no own keys, so accessing the .hasOwnProperty
method on it will get you what you want. And Object.prototype
is a non-writable property of the global Object
constructor, so it always refers to the object prototype as well.
Now, there are some cases where the expression does not do what you wanted it to do:
- Someone did overwrite the global
Object
variable
- Someone did shadow the
Object
identifier in your scope so that it doesn't refer to the global
- Someone did overwrite
Object.prototype.hasOwnProperty
with something else
- Someone did overwrite
Function.prototype.call
with something else
1: Obviously, the first two edge cases only mess with the Object.prototype
reference, but they're still edgy enough to be ignored.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…