# window

Window 对象是客户端 javascript 程序的全局对象。本章介绍 Window 对象的属性和方法，这些属性定义了许多不同的 API，但是只有一部分实际上和浏览器窗口相关。Window 对象是以窗口命名的。

### 计时器

`setTimeout()`和 `setInterval()`可以用来注册在指定的时间之后单词或重复调用的函数，其定义为 Window 对象的方法。

Window 对象的 `setTimeout()`方法用来实现一个函数在指定的毫秒之后运行。并返回一个值，这个值可以传递给 `clearTimeout()`用于取消这个函数的执行。

`setInterval()`和 `setTimeout()`一样，只不过函数会在指定毫秒数的间隔里重复调用：

```javascript
setInterval(updateClock, 60000) // 每60秒调用一次updateClock()
```

和 `setTimeout()`一样，也会返回一个值，这个值可以传递给 `clearInterval()`，用以取消后续函数的调用。

如果以 `0` 毫秒调用 `setTimeout()`，那么指定的函数不会立刻执行。相反会把它放到队列中，等前面的等待状态事件处理程序全部执行完成后，再“立即”调用它。

### 定位和导航

Window 对象的 `location` 对象，它表示该窗口中当前显示的文档的 `URL`，并定义了方法来使窗口载入新的文档。

Document 对象的 `location` 属性也引用到 `Location` 对象：

```javascript
window.location === document.location // 返回true
```

Document 对象也有一个 `URL` 属性，是文档首次载入后保存该文档的 `URL`的静态字符串。如果定位到文档的片段标识符(如#table-of-contents),`Location` 对象会做相应的更新，而 `document.URL` 属性不会改变。

#### 解析 URL

WIndow 对象的 `location` 属性引用的是 `Location` 对象，它表示该窗口中当前显示的文档的 `URL`。`Location` 对象的 `href` 属性是一个字符串，后者包含 `URL` 的完整文本。`Location` 对象的 `toString()`方法返回 `href` 属性的值。

这个对象的其他属性---`protocol`,`host`,`hostname`,`port`,`pathname` 和 `search`,分别表示 `URL` 各个部分。

#### 载入新的文档

`Location` 对象的 `assign()`方法可以使窗口载入并显示你指定的 `URL` 中的文档。`replace()`方法类似，但他在载入新的文档之前会把浏览历史中把当前文档删除。比如当要检测到用户不支持 `XMLHttpREquest` 对象，可用 `replace` 来载入静态版的 `HTML` 版本，这样后退时不会回到需要 `XMLHttpREquest` 的页面。

`Location` 对象还定义了 `reload()`方法，可以让浏览器重新载入当前文档。

使浏览器跳转到新页面有两种方法：

```javascript
// 直接给定URL
location = 'http://XXXX.com'
//相对URL
location = 'page2.html'
```

纯粹的片段标识符是相对 `URL` 的一种类型，它不会让浏览器载入新文档，只会使它滚动到文档某个位置。`#top` 标识符是个特殊的例子：如果文档中没有元素的 `ID` 是“top”，会跳转到开始处：

```javascript
location = '#top' // 跳转到文档顶部
```

`Location` 对象的 `URL` 分解属性是可写的，对它们重新赋值会改变 `URL` 的位置，并导致重新载入一个新的文档(如果改变的是 `hash` 属性，则在当前文档中进行跳转)：

```javascript
location.search = '?page=' + (pagenum + 1) //载入下个页面
```

### 浏览历史

Window 对象的 `history` 属性引用该窗口的 `History` 对象。`History` 对象的 `length` 属性表示浏览历史列表中的元素数量，但脚本不能访问已保存的 `URL`。

`History` 对象的 `back()`和 `forward()`方法与浏览器的“后退”和“前进”按钮一样。`go()`接受一个整数参数，可以在历史列表中向前或向后跳过任意多个页。

### 浏览器和屏幕信息

#### Navigator 对象

Window 对象的 `navigator` 属性引用的包含浏览器厂商和版本信息的对象。常用的 7 个属性：

1. appName：web 浏览器的全称。
2. appVersion：包含浏览器厂商和版本信息的详细字符串。
3. userAgent： 浏览器在它的 USER-AGENT HTTP 头部发送的字符串。
4. platform：在其上运行浏览器的操作系统的字符串。
5. onLine：表示浏览器当前是否连接到网络。
6. geolocation：`Geolocation` 对象定义用于确定用户地理位置信息的接口。
7. cookie：非标准的方法，如果浏览器可以保存永久 `cookie` 时，返回 `true`。

#### Screen 对象

Window 对象的 `screen` 属性引用的是 `Screen` 对象。`width` 和 `height` 指定以像素为单位的窗口大小。属性 `availWidth` 和 `availHeight` 指定实际可用显示大小，属性 `colorDepth` 指定显示的 `BPP` 值。
