Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 现代相当于。。。循环中?_Javascript - Fatal编程技术网

Javascript 现代相当于。。。循环中?

Javascript 现代相当于。。。循环中?,javascript,Javascript,我从web归档中继承了一个非具名的代码库作为个人项目 其中有许多: for (var keyCodeName in keyCodeByName) { // something happens } 有没有一种现代的for循环与这种for循环具有相同的含义?当我试图研究可枚举属性时,我会迷失在其中。最接近的等价物是使用forEach在Object.keys上循环: 这实际上大致相当于以下循环: for (let keyCodeName in keyCodeByName) { if (

我从web归档中继承了一个非具名的代码库作为个人项目

其中有许多:

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
    }
}