Le script suivant enregistre false
dans la console. Est-ce que quelqu'un sait pourquoi ou quels avantages cela apporte? D'un bref coup d'œil dans le code source de Greasemonkey, je n'ai rien trouvé qui modifie Object
. En regardant également dans le Object
il est difficile de voir des différences significatives, toutes les fonctions sont toujours le code natif.window.Object! = Objet pour le script greasemonkey
// ==UserScript==
// @name test
// @namespace test
// @include *
// @grant none
// ==/UserScript==
console.log(window.Object == Object)
(testé sur Firefox Greasemonkey &, pas sûr Scriptish & Chrome, bien que toutes les expériences sont les bienvenus!).
[NOTE: cette question est sans rapport avec à la question de {a: 2} != {a: 2}
, s'il vous plaît lire la question elle-même et non pas seulement au regard du titre avant tout vote à proximité jeté, merci!].
Vous ne pouvez pas simplement comparer des objets, car ils ne seront jamais égaux (différentes références en mémoire, etc.) [Comparaison d'objets en JavaScript] (http://stackoverflow.com/questions/1068834/object-comparison- in-javascript) – Justinas
@Justinas Je ne suis pas sûr que ce soit pertinent, celui-ci est pour la classe d'objets et l'autre pour les instances. – simonzack
il semble que 'window' n'est pas l'objet global dans ce cas, mais fait référence à la fenêtre-objet de la page en cours. Donc, comme deux cadres/fenêtres ne partagent pas les mêmes classes (identiques, mais pas les mêmes), 'Object' et' window.Object' ne sont pas non plus la même référence. C'est un sandbox de base, de sorte qu'une image/fenêtre n'interfère pas avec les variables globales de l'autre image/fenêtre. Imaginez qu'une page modifie 'Object.prototype' et que toutes les fenêtres de votre navigateur obtiennent cette modification. – Thomas