【发布时间】:2017-01-13 07:21:35
【问题描述】:
以下脚本将false 记录到控制台。有谁知道它为什么或带来什么好处?
简要浏览一下 Greasemonkey 的源代码,我找不到任何修改 Object 的内容。还要查看Object,很难看出任何有意义的差异,所有功能仍然是本机代码。
// ==UserScript==
// @name test
// @namespace test
// @include *
// @grant none
// ==/UserScript==
console.log(window.Object == Object)
(在 Greasemonkey 和 Firefox 上测试,不确定 Scriptish 和 Chrome,但欢迎任何实验!)。
[注意:这个问题与{a: 2} != {a: 2} 的问题无关,请阅读问题本身,而不是在投出任何接近的票之前只看标题,谢谢!]。
【问题讨论】:
-
你不能简单地比较对象,因为它们永远不会相等(内存中的不同引用等等)Object comparison in JavaScript
-
@Justinas 我不确定这是否相关,这个用于对象类,另一个用于实例。
-
在这种情况下,
window似乎不是全局对象,而是引用了当前页面的窗口对象。因此,就像两个框架/窗口不共享相同的类(相同但不相同),Object和window.Object也不是相同的引用。这是基本的沙盒,因此一个框架/窗口不会干扰另一个框架/窗口的全局变量。想象一下,一页会修改Object.prototype,而您浏览器中的所有窗口都会发生这种变化。 -
或者如果您的浏览器中的所有页面都共享同一个
location对象;) -
@Thomas 嗯,好主意,虽然我认为用户脚本只能在它运行的当前页面上操作,这与插件不同。在测试脚本中没有
@grants 所以没有额外的权限。但也许这样的事情仍在继续,我想知道在哪里可以找到实现这一点的代码/文档。
标签: javascript firefox greasemonkey userscripts