gpt4 book ai didi

javascript - 这个 for-in 循环检测片段会产生不需要的误报吗?

转载 作者:数据小太阳 更新时间:2023-10-29 05:39:26 26 4
gpt4 key购买 nike

我们都知道 for-in-loops在阵列上是 absolutely evil .尽管如此,它们仍然经常被使用,并且导致的错误很难追查,尤其是当发生依赖于浏览器的错误时,例如由于 indexOf-shims 等。

所以,我编写了这个简单的代码片段,它为 Array.prototype 上的“error”属性添加了一个可枚举的 getter(不适用于生产代码):

Object.defineProperty(Array.prototype, "error", {
enumerable: true,
get: function() {
if (this === Array.prototype) // that looks OK
return undefined;
if (window.confirm("Somebody who coded the site you're viewing runs through an Array with a for-in-loop.\nShame on him!\n\nDo you want to raise an Error to trace the origin?"))
throw new SyntaxError("Array traverse with for-in-loop, touching Array.prototype's 'error' property :-)");
}
});

您可以将它添加为适用于所有域的 greasemonkey 脚本,您将在几乎每个站点上看到警报 :-) 大多数警报是由使用有问题的参数调用 jQuery.extend 引起的,顺便说一句.

我现在的问题是:是否有任何情况可以使此类“错误”循环合法化,或者是否有任何其他情况导致误报?

我想知道这将如何影响我的代码的实用性。

最佳答案

是的。合法性通常是主观的,但是......

例如,也许我有一个稀疏数组,其中我只在索引处设置了数据值:

var a = [];
a[123123] = "foo";
a[1233123] = "bar";

如果我想遍历我在这个数组中定义的元素,那么我会使用 for...in 结构。即使我对其进行防御性编码,您的脚本仍会触发(误报)...

for (var prop in a) {
if (a.hasOwnProperty(prop)) {
// this is a legitimate array element
}
}

另见 Why is using "for...in" with array iteration a bad idea?了解更多信息和意见。

关于javascript - 这个 for-in 循环检测片段会产生不需要的误报吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11507509/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com