Global对象和window对象

Global对象和window对象

Global对象

  不属于任何其他对象的属性和方法,最终都是Global对象的属性和方法。如 parseFloat( )、parseInt( )、escape( )、unescape( )、isFinite( )、isNaN( )、eval( )、encodeURI()和 encodeURIComponent(),实际上全都是 Global对象的方法。
  所有在全局作用域中定义的属性和函数,也都是Global对象的属性和方法。

Global对象的属性

  Global对象的属性包括undefined、NaN和Infinity三个特殊值,以及全部的原生构造函数。
这里写图片描述

window对象

  ECMAScript 没有指出如何直接访问 Global 对象,但浏览器都是将Global对象作为window 对象的一部分加以实现的。因此,在全局作用域中声明的所有变量和函数,就都成为了 window对象的属性。

var color = "red"; 
function sayColor(){ 
    alert(window.color);   //通过window.color来访问color变量
} 
window.sayColor();  //"red" //通过window.saycolor()来调用函数。

Global对象和Window对象的对比

  *  window对象是相对于web浏览器而言的*,它并不是ECMAScripta规定的内置对象,内置对象的定义是:“由ECMAScript实现提供的、不依赖于宿主环境的对象,这些对象在ECMAScript程序执行之前就已经存在了。”window对象是宿主对象也就是在一定的环境中才会生成的对象(这里也就是指浏览器)。
  而Global对象是在任何环境中都存在的。
  全局函数和window对象的函数不一样。全局函数不属于任何一个内置对象。
  跟继承没有关系,可以认为浏览器默认提供使用的对象,都放到了Global对象中,而window对象又恰好就是这个Global对象。实际上,在浏览器的内部实现中,隐藏了真正的Global对象,而把window对象作为了Global对象的替身。一切对Global对象的操作(间接操作),都会映射到window对象上,反之亦然。这样window对象就成了Global对象的替身。而window对象同时又作为Global对象的一个属性。这样,真正的Global对象就被雪藏了。

全局对象

  全局对象是预定义的对象,作为 JavaScript 的全局函数和全局属性的占位符。通过使用全局对象,可以访问所有其他所有预定义的对象、函数和属性。全局对象不是任何对象的属性,所以它没有名称。(之所以选择Global作为这个参考页的标题,只是为了方便 组织,并不是说全局对象名为“Global”)。

  在顶层 JavaScript 代码中,可以用关键字 this 引用全局对象。但通常不必用这种方式引用全局对象,因为全局对象是作用域链的头,这意味着所有非限定性的变量和函数名都会作为该对象的属性来查询。例如,当JavaScript 代码引用 parseInt() 函数时,它引用的是全局对象的 parseInt 属性。全局对象是作用域链的头,还意味着在顶层 JavaScript 代码中声明的所有变量都将成为全局对象的属性

  全局对象只是一个对象,而不是类。既没有构造函数,也无法实例化一个新的全局对象。

  在 JavaScript 代码嵌入一个特殊环境中时,全局对象通常具有环境特定的属性。实际上,ECMAScript 标准没有规定全局对象的类型,JavaScript 的实现或嵌入的 JavaScript 都可以把任意类型的对象作为全局对象,只要该对象定义了这里列出的基本属性和函数。例如,在允许通过 LiveConnect 或相关的技术来脚本化 Java 的 JavaScript 实现中,全局对象被赋予了这里列出的 java 和 Package 属性以及 getClass() 方法。而在客户端 JavaScript 中,全局对象就是 Window 对象,表示运行JavaScript 代码的 Web 浏览器窗口。

  可以用for/in循环列出所有隐式或显式声明的全局变量:

var variables = "";
var aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa = 123; //创建一个全局变量
for (var name in this) {
variables += name + "<br />";
}
document.write(variables);

全局对象、全局函数和全局属性

  全局对象定义了引用JavaScript所有预 定义对象的属性。除了Math外,这些属性都是定义类的构造函数,Math引用的对象不是构造函数。
这里写图片描述
这里写图片描述
  
  全局对象是一个对象,而不是类。下面列出的全局函数不是任何对象的方法,它们的参考条目出现在函数名下。例如,在“parseInt()”下可以找到parseInt()函数的详细信息,在“Global.parseInt()”下就无法找到该函数的详细信息。
这里写图片描述

  全局对象不是一个类,所以下面的全局属性在自己名称下有单独的参考条目。也就是说,在“undefined”名下可以找到undefined属性的详细信息,而不是在“Global.undefined”下寻找。注意,所有顶层变量也都是全局对象的属性。

这里写图片描述
  window对象的alert()、promit()、prompt()、open()、setTimeout()、document、location等属性和方法是依赖于宿主环境的,他们都不是全局函数和属性。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值