Будет ли этот фрагмент обнаружения цикла for-in генерировать нежелательные ложные срабатывания?

Мы все это знаемдля-в-петли на массивах естьабсолютно злой, Тем не менее, они часто используются, и вызванные ошибки сложно отследить, особенно когда они зависят от браузера, например, из-заindexOfШимс или тому подобное.

Итак, я кодировал этот простой фрагмент, который добавляет перечисляемый метод получения для & quot;error& Quot; собственность наArray.prototype (не для использования в производственном коде):

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 с сомнительными аргументами, кстати.

Мой вопрос сейчас:Are there any situations that legitimate such "wrong" loops, или жеanything else causing false-positive alerts?

Мне интересно, как это повлияет на полезность моего кода.

Ответы на вопрос(1)

Ваш ответ на вопрос