次のスクリプトは、false
をコンソールに記録します。なぜ誰かがそれをもたらす利益を知っていますか?window.Object!= greasemonkeyスクリプトのオブジェクト
Greasemonkeyのソースコードを一見すると、Object
を変更するものは見つかりませんでした。また、Object
を見ると、意味のある違いは見当たりません。すべての機能はまだネイティブコードです。
// ==UserScript==
// @name test
// @namespace test
// @include *
// @grant none
// ==/UserScript==
console.log(window.Object == Object)
(任意の実験は歓迎しますが、Scriptish &クロームわからないのGreasemonkey & Firefoxの、上でテスト!)。
[注:!あなたが任意の近い票を投じる前に、この質問が{a: 2} != {a: 2}
の質問に対する無関係で、おかげで、問題そのものではなく、タイトルでちょうど一見をお読みください]。
オブジェクトは同じではないため、単純に比較することはできません(メモリ内のさまざまな参照など)[JavaScriptのオブジェクト比較](http://stackoverflow.com/questions/1068834/object-comparison- in-javascript) – Justinas
@Justinas私はそれが適切であるかどうかはわかりませんが、これはオブジェクトクラス用であり、もう1つはインスタンス用です。 – simonzack
この場合、 'window'はグローバルオブジェクトではなく、現在のページのウィンドウオブジェクトを参照しているようです。つまり、2つのフレーム/ウィンドウが同じクラス(同一ではないが同じ)を共有しないように、 'Object'と' window.Object'は同じ参照ではありません。これは基本的なサンドボックスなので、1つのフレーム/ウィンドウは他のフレーム/ウィンドウのグローバル変数と干渉しません。 1つのページで 'Object.prototype'が変更され、ブラウザのすべてのウィンドウがその変更を取得するとします。 – Thomas