Javascript 现代相当于。。。循环中?
我从web归档中继承了一个非具名的代码库作为个人项目 其中有许多:Javascript 现代相当于。。。循环中?,javascript,Javascript,我从web归档中继承了一个非具名的代码库作为个人项目 其中有许多: for (var keyCodeName in keyCodeByName) { // something happens } 有没有一种现代的for循环与这种for循环具有相同的含义?当我试图研究可枚举属性时,我会迷失在其中。最接近的等价物是使用forEach在Object.keys上循环: 这实际上大致相当于以下循环: for (let keyCodeName in keyCodeByName) { if (
for (var keyCodeName in keyCodeByName) {
// something happens
}
有没有一种现代的for循环与这种for循环具有相同的含义?当我试图研究可枚举属性时,我会迷失在其中。最接近的等价物是使用forEach在Object.keys上循环: 这实际上大致相当于以下循环:
for (let keyCodeName in keyCodeByName) {
if (keyCodeByName.hasOwnProperty(keyCodeName)) {
// something happens
}
}
因为Object.keys只返回自己的属性,而for in也将处理继承的属性
许多程序员忘记了做hasOwnProperty检查,在大多数情况下这是无害的,因为继承的属性都不可枚举。因此,如果您试图转换的代码没有进行检查,那么很可能是他们没有意识到他们需要它,而不是他们真的想要处理继承的属性。因此,使用Object.keys可能更接近预期行为
请参见这是否回答了您的问题?它可以取决于发生了什么,做了什么,for…in循环出了什么问题?为什么需要替换它?如果没有正确使用,.中的for…会有一些问题。要在键上迭代,等价物将是Object.keysmyObj.forEach,尽管乍一看我不明白为什么要更改它…这正是我想要的基本解释。谢谢你花时间写这封信,巴玛。在TypeScript中,此检查在严格模式下被标记,并且是我需要的缺少的键。object.hasOwnProperty检查不再需要,因为您指出继承的属性是不可数的。如果您添加的是可枚举的继承属性,那么您是做错了什么,或者您使用的是不允许更改可枚举性的旧浏览器。仍然进行检查的唯一原因是支持旧浏览器。在中使用for…没有什么错。它比使用Object.keys更有效。forEach@PHPGuru是的,我链接到的问题有一个网站链接,解释了为什么没有必要。但它也假定人们将以正确的方式扩展Object.prototype,defineProperty和enumerable:false,这并不是您始终可以依赖的。
for (let keyCodeName in keyCodeByName) {
if (keyCodeByName.hasOwnProperty(keyCodeName)) {
// something happens
}
}