if (someVar.hasOwnProperty('someProperty') ) {
// do something();
} else {
// do somethingElse();
}
Run Code Online (Sandbox Code Playgroud)
什么是正确的使用/解释hasOwnProperty('someProperty')?
为什么我们不能简单地someVar.someProperty用来检查对象是否someVar包含具有名称的属性someProperty?
在这种情况下,什么是财产?
这个javascript检查什么属性?
我总是不喜欢hasOwnProperty()在javascript中检查循环对象时的需要:
for ( var key in object ) {
if ( !object.hasOwnProperty( key ) ) {
continue;
}
// Now I can do whatever I needed to do
}
Run Code Online (Sandbox Code Playgroud)
它似乎总是浪费垂直空间来遍历对象中的键,然后必须明确检查以确保这些键不是来自其他地方.我显然很熟悉为什么这在javascript中是必要的,特别是由于旧的库有时会将东西注入原型链(咳嗽原型咳嗽).
但是,据我所知,棱角分明没有这样的东西.打字稿肯定没有理由.我无法想象任何现代的JavaScript框架会.因此,在现代Angular应用程序(或任何现代JavaScript应用程序)中跳过此类检查的可能缺点是什么.我只是冒着自己的团队意外修改原型(或意外导入修改原型的库)而导致问题的风险,还是有更多我不知道的麻烦空间?如果我尝试这样做,原型链会以什么其他方式咬我?
for ( let key in object ) {
}
Run Code Online (Sandbox Code Playgroud)
我自己的测试没有发现任何问题,但我可能会遗漏一些明显的东西.是的,我Object.keys( object )在mondern js/ts中知道.它完成了工作,但我不认为它像a一样干净for ... in,如果我能让它hasOwnProperty()死,我宁愿使用它.