質問: jQueryの内部で`new Date()`が「このオブジェクトではサポートされていない操作です」というエラーを吐いています。 これを回避する方法が知りたいです。 再現条件が分からず、最小限の再現ソースを提示できないので、代わりに状況を説明させてください。 なお、再現を確認した環境はIE11とEdgeです。Chromeでは発生していません。 次の画像は、IE11の開発者ツール(F12)です。 見えているソースは、jQuery 1.11.3のものです。 ![jquery](https://i.stack.imgur.com/3kdnn.png) 次の画像は、上記のエラー発生時のコールスタックです。 上から8つ目の`request.js`は、私が書いたコードです。 jQueryの`ajax`メソッドを呼んでいます。 ![コールスタック](https://i.stack.imgur.com/pXx0G.png) 次の画像は、エラー発生時にデバッガが止まっている状況で、変数ウォッチからグローバル変数`Date`を確認したところです。 なぜか`undefined`になっています。 エラーの根本的な原因は分かりませんが、直接的な原因はこれのようです。 ![ウォッチ Date](https://i.stack.imgur.com/hb64Y.png) 次の画像は、上記と同様に`jQuery`変数が存在しているかどうか確認したところです。 `jQuery`は見つかりましたが、なぜか`$`が`undefined`です。 ![ウォッチ jQuery](https://i.stack.imgur.com/M0HJX.png) 次の画像は、上記のウォッチで確認しているときにIEがクラッシュしたところです。 ウォッチのリストに、`jQuery`をもう一度追加したところでクラッシュしました。 何度か試しましたところ、クラッシュのタイミングは若干前後するものの、`jQuery`を2回以上ウォッチに追加することで再現します。 ![画像の説明をここに入力](https://i.stack.imgur.com/NnLyU.png) **追記** 上記の問題のコードでは必ず発生します。 コールスタックの上から6番目、「非同期呼び出し」の次の行にあるsendの部分でブレークポイントを貼って止めてみると、その時点ではDateが存在します。 また、Dateがundefinedだったのと同様に、StringやNumberなどもundefinedになっていました。
回答: デバッグ中にブラウザが落ちてしまうというのは大変ですね。 例えば下記のように、`Date`(必要であれば`$`も)の変更を監視・拒否するように、プログラム冒頭のグローバル名前空間で仕込んでおくというのはどうでしょうか。 ``` // Date の変更を拒否する const orig_date = Date; Object.defineProperty( this, "Date", { set: function(v){ console.log("!NOT ALLOWED: set Date:", v); console.trace(); }, get: function(){ return orig_date; }, } ); ```