IE8の奇妙なjs array assignバグ
-
05-07-2019 - |
質問
このコードはie8で奇妙なバグを引き起こします。 MicrosoftAjaxAdoNet.jsのリンクテキスト
にあります。 function Sys$Dataこのコードはie8で奇妙なバグを引き起こします。 MicrosoftAjaxAdoNet.jsのリンクテキスト
にあります。
[].indexOf || (Array.prototype.indexOf = function (v, n) {
n = (n == null) ? 0 : n;
var m = this.length;
for (var i = n; i < m; i++)
if (this[i] == v) return i;
return -1;
この関数を呼び出す前は、this._changesetEntriesは常にnullです。この関数が呼び出された後、his._changesetEntriesが空の配列になると予想しました。 chrome、firefox、ie8で予想どおりに発生しました。 ie8では常に正しいとは限りません。この関数がメソッド&quot; indexOf(v、n)&quot;を作成することがあります。空の配列の代わりに。
この奇妙な動作により、ここに記載されている他のバグが発生しますリンクテキスト
編集:この問題をコードから分離できるようになりました。この問題はフィッシュアイjqueryプラグインを使用するときに発生します。このプラグインには、次のようなものがあります
<*>
})
これはこの問題の原因です。
AdoNetBatchWriter$startChangeSet() {
this._changesetBoundary = "changeset_" + this._createBoundary();
this._changesetEntries = [];
}
この関数を呼び出す前は、this._changesetEntriesは常にnullです。この関数が呼び出された後、his._changesetEntriesが空の配列になると予想しました。 chrome、firefox、ie8で予想どおりに発生しました。 ie8では常に正しいとは限りません。この関数がメソッド&quot; indexOf(v、n)&quot;を作成することがあります。空の配列の代わりに。
この奇妙な動作により、ここに記載されている他のバグが発生しますリンクテキスト
編集:この問題をコードから分離できるようになりました。この問題はフィッシュアイjqueryプラグインを使用するときに発生します。このプラグインには、次のようなものがあります
<*>})
これはこの問題の原因です。
解決
ここで重要なのは質問の「時々」です。 this._changesetEntries
はどのような条件下で空の配列ではなく関数を取得しますか?いくつかのページが読み込まれますか? dataServiceへのいくつかの呼び出し?テストケースを作成すると、回答がより明確になる場合があります。
他のヒント
これの使用方法を投稿できますか?それまでにできることは、推測することだけです。
これはコンストラクタのように見えます。 new Sys $ Data $ _AdoNetBatchWriter $ startChangeSet()
を使用してインスタンス化していますか?