天道酬勤,学无止境

global-object

检查全局属性/函数是否已在 JavaScript 中被覆盖(Check if a global property/function has been overwritten in JavaScript)

问题 JavaScript 可以很容易地覆盖全局对象的属性和函数。 我想找到一种方法来检查全局属性的原始版本是否已被替换。 考虑有人把它放在他们的 HTML 中: <script type="text/javascript"> window.encodeURIComponent = eval; </script> <script type="text/javascript" src="myscript.js"></script> 如果 myscript.js 在某处调用 encodeURIComponent 函数,它现在的行为将不可预测。 那么有没有办法在 myscript.js 中检查是否有人在我使用它之前覆盖了该函数? 回答1 我唯一知道的是一种分析函数字符串表示的简单方法。 通常,代码 window.encodeURIComponent.toString() 应该产生这样的东西: function encodeURIComponent() { [native code] } 可以很容易地解析关键信息function encodeURIComponent 。 如果该函数被eval覆盖,如您的示例所示,您将获得: function eval() { [native code] } 通常,为了检查window属性,您可以创建一个假 iframe 并将window.[property

2021-07-09 14:14:38    分类:技术分享    javascript   overwrite   global-object

Check if a global property/function has been overwritten in JavaScript

JavaScript makes it easy to overwrite properties and functions of the global object. I'd like to find a way to check if the original version of a global property has been replaced. Consider someone putting this in their HTML: <script type="text/javascript"> window.encodeURIComponent = eval; </script> <script type="text/javascript" src="myscript.js"></script> If myscript.js calls the encodeURIComponent function somewhere, it will now behave unpredictably. So is there a way I can check inside myscript.js if someone has overwritten that function before I use it?

2021-06-02 23:31:24    分类:问答    javascript   overwrite   global-object

ReferenceError和全局对象(ReferenceError and the global object)

问题 在javascript window是全局对象,这意味着全局范围内的每个对象都是window的子级。 那么为什么我得到这个结果: console.log(window.foo); // No error, logs "undefined". console.log(foo); // Uncaught ReferenceError: foo is not defined. 小提琴 这两行应该是相同的,不是吗? 回答1 因为使用window.foo您显式地在寻找window对象的foo属性,而在后一个选项中则不是这样。 在后一个选项中,如果未定义foo ,则开发人员应该能够知道它未定义并得到清除错误警告,而不是由解释器自行将其设置为undefined (如第一种情况),这将导致出乎意料的结果。 参考错误: 引用不存在的变量时表示错误。 尝试取消引用尚未声明的变量时,抛出ReferenceError。 看看这篇文章以了解更多信息: 了解JavaScript的“未定义” 从以上文章引用: 如果引用的基值未定义,则认为该引用不可解析。 因此,如果未定义点之前的值,则无法解析属性引用。 以下示例将引发ReferenceError,但不会这样,因为TypeError首先到达那里。 这是因为属性的基值受CheckObjectCoercible(ECMA 5 9.10通过11.2.1)的约束

2021-04-03 13:58:14    分类:技术分享    javascript   window   referenceerror   global-object

ReferenceError and the global object

In javascript window is the global object, which means every object in the global scope is a child of window. So why I get this result: console.log(window.foo); // No error, logs "undefined". console.log(foo); // Uncaught ReferenceError: foo is not defined. Fiddle Those two lines should be the same, shouldn't they?

2021-03-29 01:08:15    分类:问答    javascript   window   referenceerror   global-object