I've always disliked the need to check hasOwnProperty()
when looping over objects in javascript:
for ( var key in object ) {
if ( !object.hasOwnProperty( key ) ) {
continue;
}
// Now I can do whatever I needed to do
}
It always seems like wasted vertical space to loop through keys in an object and then have to explicitly check to make sure those keys didn't come from somewhere else. I'm obviously familiar with why this was necessary in javascript, especially due to older libraries that would sometimes inject things into the prototype chain (cough Prototype cough).
However, to the best of my knowledge, angular does no such thing. Typescript certainly wouldn't have reason to either. I can't imagine any modern javascript framework would. As a result, what are the possible downsides of skipping such a check in a modern Angular app (or any modern javascript app). Am I only at risk of problems caused by my own team accidentally modifying prototypes (or accidentally importing libraries that modify prototypes), or is there more room for trouble that I'm not aware of? In what other ways might the prototype chain bite me if I try to just do this?
for ( let key in object ) {
}
My own tests haven't revealed any problems, but I may be missing something obvious. And yes, I'm aware of Object.keys( object )
in mondern js/ts. It gets the job done but I don't think it is as clean as a for ... in
, which is what I would rather use if I can let hasOwnProperty()
die.
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…