《JS原理、方法与实践》- Global与Window对象

简介: 《JS原理、方法与实践》- Global与Window对象

JS时面向对象的语言,或者说它本身就是一个大对象,就像一个大箱子里面装着很多大盒子,每个大盒子里面都装着小盒子....那么最顶层的箱子是什么呢?这个对象在ES标准中叫做Global对象。ES标准中规定Global对象要在进入执行环境前就已创建,它是所有对象的根对象,其他对下个你都是它的属性或者属性的属性。

**这里的Global是表示功能的词,不代表具体的对象名。**事实上并不一定存在Global对象,但是每个具体的宿主环境都需要有一个Global对象,例如,浏览器中的window对象就是Global对象,所有其他对象都是window对象的属性或其属性的属性。例如,Stirng,Number,Boolean,Array,RegExp等对象都是window的属性,就连Object和Function也是window的属性对象。

可利用:console.log(Object.getOwnPropertyNames(window));

查看widow包含的属性,亲测包含1102个,有些可能并没有什么意义,但是多为有意义的属性。

![](https://upload-images.jianshu.io/upload_images/2789632-e84a44f8aa2d9a7a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

#### Window对象的特殊性

浏览器的Global对象window是使用Window对象创建出来的,Window对象是function类型,window对象是obejct类型。用于创建window对象的Window对象跟我们自定义的function对象之间存在一些差别。

* 不可以创建对象:我们自己创建的function对象可以使用new关键字来创建相应的object类型实例对象,但是Window对象不可以用于创建对象。

* 不可以作为方法调用:Window也不可以作为方法来调用,也就是说,在程序中直接调用Window()也是不可以的,并且这种用法也没有实际意义。

* 变量就是属性:在最外层定义的变量也叫做全局变量,与在function中定义的其他变量存在很大的区别。在最外层定义的变量会自动称为window对象的属性,而在普通function中变量和实例对象的属性是完全没有关系的两类数据。

代码示例:

```

var v = 1;

// 通过修改this的属性可以改变全局变量的值

this.v = 2;

console.log(v); // 2

// 通过修改全局变量的值也可以修改window对象同名属性的值

v = 3;

console.log(window.v); // 3

// 我们自定义方法中变量和实例对象的属性是相互独立的

function Obj(){

var v = 2;

this.v = 5;

console.log(v); // 2

console.log(this.v); // 5

}

new Obj(); // 2

```

从上面的示例中可以看出,最外层定义的变量和this的属性及window的同名属性都是同一个,可以相互操作。但是,在我们自定义的function函数体内变量和属性之间存在严格区分,不可以相互调用。

###### 另外,window对象本身也是自己的一个属性

可利用语句查看:console.log(Object.getOwnPropertyNames(window));

![](https://upload-images.jianshu.io/upload_images/2789632-22a587fb1d40feaa.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

目录
相关文章
|
1天前
|
存储 JavaScript 索引
js开发:请解释什么是ES6的Map和Set,以及它们与普通对象和数组的区别。
ES6引入了Map和Set数据结构。Map的键可以是任意类型且有序,与对象的字符串或符号键不同;Set存储唯一值,无重复。两者皆可迭代,支持for...of循环。Map有get、set、has、delete等方法,Set有add、delete、has方法。示例展示了Map和Set的基本操作。
11 3
|
3天前
|
JavaScript 前端开发 开发者
JavaScript中的错误处理:try-catch语句与错误对象
【4月更文挑战第22天】JavaScript中的错误处理通过try-catch语句和错误对象实现。try块包含可能抛出异常的代码,catch块捕获并处理错误,finally块则无论是否出错都会执行。错误对象提供关于错误的详细信息,如类型、消息和堆栈。常见的错误类型包括RangeError、ReferenceError等。最佳实践包括及时捕获错误、提供有用信息、不忽略错误、利用堆栈信息和避免在finally块中抛错。
|
3天前
|
前端开发 JavaScript 编译器
深入解析JavaScript中的异步编程:Promises与async/await的使用与原理
【4月更文挑战第22天】本文深入解析JavaScript异步编程,重点讨论Promises和async/await。Promises用于管理异步操作,有pending、fulfilled和rejected三种状态。通过.then()和.catch()处理结果,但可能导致回调地狱。async/await是ES2017的语法糖,使异步编程更直观,类似同步代码,通过事件循环和微任务队列实现。两者各有优势,适用于不同场景,能有效提升代码可读性和维护性。
|
7天前
|
JavaScript 前端开发 Java
js 垃圾回收机制的方法
js 垃圾回收机制的方法
|
7天前
|
JavaScript 前端开发
js数据类型有几类?一共有几种?判断数据类型的方法是什么?
js数据类型有几类?一共有几种?判断数据类型的方法是什么?
|
8天前
|
JavaScript 前端开发
js绑定事件的方法
js绑定事件的方法
22 11
|
8天前
|
JavaScript
JS生成uuid的四种方法
JS生成uuid的四种方法
10 0
|
8天前
|
JavaScript 前端开发 iOS开发
js实用方法记录-动态加载css/js
js实用方法记录-动态加载css/js
16 0
|
8天前
|
JavaScript
【Js】检查Date对象是否为Invalid Date
【Js】检查Date对象是否为Invalid Date
10 0
|
JavaScript 前端开发 数据安全/隐私保护