2021-06-11 JS单例内置对象——Global

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;
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值