配列での for-in-loopsが絶対に悪であることは誰もが知っています。それでも、それらは頻繁に使用され、原因となったエラーを追跡するのは複雑です。特に、たとえばindexOf
-shim などが原因でブラウザーに依存する場合はそうです。
そこで、" error
" プロパティの列挙可能な getter を追加するこの単純なスニペットをコーディングしました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 :-)");
}
});
すべてのドメインに対してグリースモンキー スクリプトとして追加でき、ほぼすべてのサイトでアラートが表示されます :-) それらのほとんどはjQuery.extend
、疑わしい引数を使用した の呼び出しによって引き起こされます。
私の質問は次のとおりです。そのような「間違った」ループを正当化する状況、または誤検知アラートを引き起こすその他の状況はありますか?
これが私のコードの有用性にどのように影響するか疑問に思っています。