虽然 ECMAScript 把浏览器对象模型(BOM,Browser Object Model)描述为 JavaScript 的核心,但实际上 BOM 是使用 JavaScript 开发 Web 应用程序的核心。BOM 提供了与网页无关的浏览器功能对象。多年来,BOM 是在缺乏规范的背景下发展起来的,因此既充满乐趣又问题多多。毕竟,浏览器开发商都按照自己的意愿来为它添砖加瓦。最终,浏览器实现之间共通的部分成为了事实标准,为 Web 开发提供了浏览器间互操作的基础。HTML5 规范中有一部分涵盖了 BOM 的主要内容,因为 W3C 希望将JavaScript 在浏览器中最基础的部分标准化。

1 window对象

BOM 的核心是 window 对象,表示浏览器的实例。window 对象在浏览器中有两重身份,一个是ECMAScript 中的 Global 对象,另一个就是浏览器窗口的 JavaScript 接口。这意味着网页中定义的所有对象、变量和函数都以 window 作为其 Global 对象,都可以访问其上定义的 parseInt()等全局方法。

注意 因为 window 对象的属性在全局作用域中有效,所以很多浏览器 API 及相关构造函数都以 window 对象属性的形式暴露出来。这些 API 将在全书各章中介绍,特别是第 20 章。另外,由于实现不同,某些 window 对象的属性在不同浏览器间可能差异很大。本章不会介绍已经废弃的、非标准化或特定于浏览器的 window 属性。

1.1 Global作用域

因为 window 对象被复用为 ECMAScript 的 Global 对象,所以通过 var 声明的所有全局变量和函数都会变成 window 对象的属性和方法。比如:

var age = 29;
var sayAge = () => alert(this.age);
alert(window.age); // 29
sayAge(); // 29
window.sayAge(); // 29

这里,变量 age 和函数 sayAge()被定义在全局作用域中,它们自动成为了 window 对象的成员。因此,变量 age 可以通过 window.age 来访问,而函数 sayAge()也可以通过 window.sayAge()来访问。因为 sayAge()存在于全局作用域,this.age 映射到 window.age,所以就可以显示正确的结果了。

如果在这里使用 let 或 const 替代 var,则不会把变量添加给全局对象:

let age = 29;
const sayAge = () => alert(this.age);
alert(window.age); // undefined
sayAge(); // undefined
window.sayAge(); // TypeError: window.sayAge is not a function

另外,访问未声明的变量会抛出错误,但是可以在 window 对象上查询是否存在可能未声明的变量。比如:

// 这会导致抛出错误,因为 oldValue 没有声明
var newValue = oldValue;
// 这不会抛出错误,因为这里是属性查询
// newValue 会被设置为 undefined
var newValue = window.oldValue;

记住,JavaScript 中有很多对象都暴露在全局作用域中,比如 location 和 navigator(本章后面都会讨论),因而它们也是 window 对象的属性。

12 浏览器对象模型BOM相关推荐

  1. js笔记(四)内置对象Math和Date()、浏览器对象模型BOM

    大标题 小标题 备注 一.内置对象Math.Date() 1. Math 数学对象; 2. Date() 日期对象; 常用的数学对象:Math.PI.abs(n).round(n).random(). ...

  2. 浏览器对象模型bom的作用是什么?

    浏览器对象模型bom的作用是什么? 零.总结 1.BOM提供了独立于内容而与浏览器窗口进行交互的对象 2.BOM提供了一些访问窗口对象的一些方法,我们可以用它来移动窗口位置,改变窗口大小,打开新窗口和 ...

  3. 浏览器对象模型BOM

    访问和操作浏览器窗口的模型称为浏览器对象模型BOM(Browser Object Model),但习惯上是把所有针对浏览器的JavaScript扩展都纳入BOM的范畴.BOM提供了一组独立于网页内容而 ...

  4. JavaScript浏览器对象模型BOM

    JavaScript浏览器对象模型BOM ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ...

  5. 浏览器对象模型(BOM)

    BOM结构 用户浏览网页的时候,浏览器会自动创建一些对象,这些对象存放着浏览器窗口的属性和相关信息,也就是大家熟称的BOM.浏览器对象模型是一个层次化的对象集,我们可以通过window对象访问所有对象 ...

  6. 浏览器对象模型BOM学习

    BOM 浏览器对象模型 BM可以使我们通过JS来操作浏览器 在BOM中为我们提供了一组对象,用来完成对浏宽器的操作 B0M对象 Window 代表的是整个浏览器的窗口,同时window也是网页中的全局 ...

  7. 什么是BOM BOM概述 浏览器对象模型 BOM的构成

    什么是BOM BOM(Browser Object Model)即浏览器对象模型,它提供了独立于内容而与浏览器窗口进行交互的对象,其核心对象是window: BOM是由一些列相关对象构成,并且每个对象 ...

  8. 浏览器对象模型 (BOM)

    浏览器 目前主流的浏览器分这么几种: IE 6~11:国内用得最多的IE浏览器,历来对W3C标准支持差.从IE10开始支持ES6标准: Chrome:Google出品的基于Webkit内核浏览器,内置 ...

  9. 前端之浏览器对象模型(BOM)

    1.BOM 概念: BOM(Browser Object Model) 是指浏览器对象模型,浏览器对象模型提供了独立于内容的.可以与浏览器窗口进行互动的对象结构.BOM由多个对象组成,其中代表浏览器窗 ...

  10. JavaScript学习总结(一)——ECMAScript、BOM、DOM(核心、浏览器对象模型与文档对象模型)...

    一.JavaScript简介 JavaScript是一种解释执行的脚本语言,是一种动态类型.弱类型.基于原型的语言,内置支持类型,它遵循ECMAScript标准.它的解释器被称为JavaScript引 ...

最新文章

  1. 多尺度的CityNeRF: Building NeRF at City Scale
  2. 智能的定义是什么?如何正确理解智能家居?
  3. 关于游戏开发中时间性能统计工具本身overhead较高的问题
  4. CS229 1 .线性回归与特征归一化(feature scaling)
  5. 二叉树的中序遍历非递归方法(算法导论第三版12.1-3)
  6. node.js 笔记1 模块方面
  7. 蓝桥杯 ALGO-145 算法训练 4-1打印下述图形
  8. document.getElementById找不到元素
  9. 刘强东「复出」搞团购,京东急什么?
  10. 排列熵、模糊熵、近似熵、样本熵的原理及MATLAB实现之样本熵
  11. 每日题解:LeetCode 718. 最长重复子数组
  12. Ubuntu系统安装 –修复USB启动盘 “can’t open /dev/sr0: No medium found” 问题
  13. 归一化mysql函数_数据归一化和两种常用的归一化方法
  14. 目标跟踪经典算法汇总(持续更新...)
  15. c语言程序设计移动字母,C语言程序设计实例大全(220个例子)
  16. 对数学规划软件 CPLEX 等读取 MPS 文件的理解
  17. E2类 MCR-WPT系统的搭建
  18. 三、SM1P步进电机控制器操作说明
  19. matlab 提示秩 1,Cholesky 分解的秩 1 更新
  20. 汇川触摸屏IT7000E和汇川中小型系列PLC连接及MW寄存器说明

热门文章

  1. Android studio打包遇到的问题总结
  2. linux下的用户的管理(创建用户,删除用户)
  3. 今日力推: Android 厨客APP / Android 趣刻App
  4. el-table 懒加载不触发合计_Angular-懒加载第三方
  5. testmeshpro合批_UGUI合批原理笔记
  6. python怎么打出pi_随手写了段 Python,微信的地球居然转起来
  7. 学生选课系统代码-6-conf配置层
  8. python-gui-pyqt5的使用方法-2
  9. 计算机制作乘法表格,excel表格乘法怎么用,excel表格怎么算乘法
  10. 重置电脑的网络配置 -- 解决防火墙问题导致的应用启动失败