Global对象
简介
Global对象是最特别的对象,ECMA-262 规定 Global对象为一种兜底对象,不属于任何对象的属性和方法。事实上,不存在全局变量或全局函数这种东西。在全局作用域中定义的变量和函数都会变成 Global 对象的属性 。
isNaN()、isFinite()、parseInt()和 parseFloat()
,实际上都是 Global 对象的方法。除了这些,Global 对象上还有另外一些方法。
- urL编码方法–
encodeURI()
、encodeURICompnent()
🐖意: 是uri 🙅♂️ url
这两个方法都用于编码统一资源标识符(URI),以便传给浏览器并理解它们,有效的URI不能包含某些字符,如空格。需要替换无效字符。
encodeURI()方法用于整个URI进行编码。
encodeURIComponent()方法用于编码URI中单独的组件。
区别是encodeURI()不会编码属于URLL组件的特殊字符,比如冒号、斜杠、问号、
井号,而 encodeURIComponent()会编码它发现的所有非标准字符。
let uri = "http://www.wrox.com/illegal value.js#start";
console.log(encodeURI(uri)); // "http://www.wrox.com/illegal%20value.js#start"
console.log(encodeURIComponent(uri)); //"http%3A%2F%2Fwww.wrox.com%2Fillegal%20value.js%23start"
一般来说,使用 encodeURIComponent()应该比使用 encodeURI()的频率更高,
这是因为编码查询字符串参数比编码基准 URI 的次数更多。
- 解码方法
decodeURI()
、decodeURIComponent()
decodeURI()只对使用 encodeURI()编码过的字符解码。类似地,decodeURIComponent()解码所有被 encodeURIComponent()编码的字符,基本上就是解码所有特殊值。
let uri = "http%3A%2F%2Fwww.wrox.com%2Fillegal%20value.js%23start";
console.log(decodeURI(uri)); // http%3A%2F%2Fwww.wrox.com%2Fillegal value.js%23start
console.log(decodeURIComponent(uri)); // http:// www.wrox.com/illegal value.js#start
- eval() 方法
eval()是一个完整的ECMAScript解释器,接受一个参数,即一个要执行的 ECMAScript(JavaScript)字符串。
eval("console.log('hi')");
//上面这行代码的功能与下一行等价:
console.log("hi");
当解释器发现eval()调用时,会将参数解释为实际的ECMAScript语句,然后将其插入到该位置,通过eval()执行的代码属于该调用所在上下文,该被执行的代码与该上下文拥有相同的作用域链。这意味着定义在包含上下文中的变量可以在 eval()调用内部被引用。
let msg = "hello world";
eval("console.log(msg)"); // "hello world"
eval("function sayHi() { console.log('hi'); }");
sayHi(); // 'hi'
通过 eval()定义的任何变量和函数都不会被提升,这是因为在解析代码的时候,它们是被包含在一个字符串中的。它们只是在 eval()执行的时候才会被创建。
eval("let msg = 'hello world';");
console.log(msg); // Reference Error: msg is not defined
在严格模式下,在 eval()内部创建的变量和函数无法被外部访问。
注意 解释代码字符串的能力是非常强大的,但也非常危险。在使用 eval()的时候必须
极为慎重,特别是在解释用户输入的内容时。因为这个方法会对 XSS 利用暴露出很大的
攻击面。恶意用户可能插入会导致你网站或应用崩溃的代码。
- window对象
虽然 ECMA-262 没有规定直接访问 Global 对象的方式,但浏览器将 window 对象实现为 Global对象的代理。
var color = "red";
function sayColor() {
console.log(window.color);
}
window.sayColor(); // "red"
另外一种获取Global对象的方式:
let global = function(){
return this;
}