学过前端开发的地球人应该都了解,JavaScript分为三个部分:ECMAScript(JS语言本身基础语法),DOM(文档对象模型,应用程序编程接口),BOM(浏览器对象模型)。

BOM,实际上与浏览器有关系。因此浏览器厂商可以按照各自的想法随意去扩展(基于window对象的扩展)。不过,扩展归扩展,每个浏览器之间都遵循着一套标准。学习BOM对于理解JS这门语言仍然是很重要的,因此不能忽视。以下是我的一些总结,给出一些常用方法。并不会细说每个方法如何使用,这篇文章的主要目的,就是希望BOM在我们脑子里形成一个简单的框架。知道一些常用的方法,在遇到问题的时候可以追本溯源。

BOM中存在五个对象:

  1. window对象(核心对象)
  2. location对象(即是window对象的属性,又是document对象的属性)
  3. navigator对象
  4. history对象:浏览器前进后退
  5. screen对象:可以通过此对象获取移动端理想视口的宽度

其他四个对象都是window对象下的属性,每个对象下都存在一些属性和方法,下面列出几种常见和常使用的方法,同时给出简单的说明。

  • window对象(核心对象)的常见方法

    • 异步:XMLHttpRequest构造函数
    • Number数据类型:Number, parseInt, parseFloat, isNaN, isFinite
    • 定时器:setTimeout, setInterval。这里想说明一下的是,setTimeout中回调函数中的this会指向window对象,原因其实很简单。在回调函数作为参数传递给了setTimout, 此时发生this的隐式赋值丢失。还有一个需要注意的是setTimeout的执行顺序问题。
    • url加密:encodeURI, encodeURIComponent方法
    • url解密:decodeURI, decodeURIComponent方法
    • 窗口尺寸:(innerWidth, innerHeight) (outerWidth, outerHeight),这里要与DOM中的client dimension和offset dimension区分开来,也就是clientWidth(Height) 和 offsetWidth(Height)
    • 窗口位置:(screenLeft, screenTop) (screenX, screenY)
    • 打开新窗口: open方法,此方法可接收三个参数
    • 系统对话框:alert, confirm, prompt方法
  • location对象
    • href属性:获取url地址, (也可以通过此属性设置url地址)
    • protocal属性:返回页面使用的协议, (也可以通过此属性设置protocal)
    • host属性:返回服务器名称和端口号,既包括hostname + port. (也可以通过此属性设置host)
    • hostname属性:返回不带端口号的服务器名称, (也可以通过此属性设置hostname)
    • port属性:返回端口号, (也可以通过此属性设置port)
    • pathname属性:返回url目录或文件名, (也可以通过此属性设置pathname)
    • hash属性:返回url中的hash(#content), (也可以通过此属性设置hash)
    • search属性:query string(如?name=keith&height=180), (也可以通过此属性设置search)
    • reload方法:页面以最有效的方式加载。也就是说,如果页面自上次请求以来并没有改变过,页面就会从浏览器缓存中加载。如果要强制从浏览器重新加载,可以传递一个true的布尔值。
  • navigator对象
    • userAgent:用户代理,查询用户使用的浏览器信息。在移动端上可用于判断用户使用的是哪种类型的移动设备或浏览器

BOM知识梳理的更多相关文章

  1. [SQL] SQL 基础知识梳理(一)- 数据库与 SQL

    SQL 基础知识梳理(一)- 数据库与 SQL [博主]反骨仔 [原文地址]http://www.cnblogs.com/liqingwen/p/5902856.html 目录 What's 数据库 ...

  2. [SQL] SQL 基础知识梳理(二) - 查询基础

    SQL 基础知识梳理(二) - 查询基础 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5904824.html 序 这是<SQL 基础知识梳理( ...

  3. [SQL] SQL 基础知识梳理(三) - 聚合和排序

    SQL 基础知识梳理(三) - 聚合和排序 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5926689.html 序 这是<SQL 基础知识梳理 ...

  4. [SQL] SQL 基础知识梳理(四) - 数据更新

    SQL 基础知识梳理(四) - 数据更新 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5929786.html 序 这是<SQL 基础知识梳理( ...

  5. [SQL] SQL 基础知识梳理(五) - 复杂查询

    SQL 基础知识梳理(五) - 复杂查询 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5939796.html 序 这是<SQL 基础知识梳理( ...

  6. solr DIH 知识梳理

    solr DIH 知识梳理 web.xml中listener配置 <listener> <listener-class>org.apache.solr.handler.data ...

  7. Anliven - 基础知识梳理汇总 - 软件测试

    基础知识梳理 - 软件测试 - 概念 基础知识梳理 - 软件测试 - 分类 基础知识梳理 - 软件测试 - 流程 基础知识梳理 - 软件测试 - 用例 基础知识梳理 - 软件测试 - 方法 基础知识梳 ...

  8. [C# 基础知识梳理系列]专题六:泛型基础篇——为什么引入泛型

    引言: 前面专题主要介绍了C#1中的2个核心特性——委托和事件,然而在C# 2.0中又引入一个很重要的特性,它就是泛型,大家在平常的操作中肯定会经常碰到并使用它,如果你对于它的一些相关特性还不是很了解 ...

  9. java基础知识梳理

    java基础知识梳理 1 基本数据类型

随机推荐

  1. imperva 获取gti文档

    SSH到设备(MX或GW) 以root用户身份登录MX和GW 运行“impctl support get-tech-info --last-server-archives=5 --caes-numbe ...

  2. ARM Linux 3.x的设备树(Device Tree)【转】

    转自:http://blog.csdn.net/21cnbao/article/details/8457546 宋宝华 Barry Song <21cnbao@gmail.com> 1.  ...

  3. 03.JavaScript简单介绍

    一.JavaScript的历史 1992年Nombas开发出C-minus-minus(C--)的嵌入式脚本语言(最初绑定在CEnvi软件中).后将其改名ScriptEase.(客户端执行的语言) N ...

  4. 转载:Google 官方应用架构的最佳实践指南 赞👍

    官方给的实践指南,很有实际的指导意义,  特别是对一些小公司,小团队,给了很好的参考意义. 原文地址: https://developer.android.com/topic/libraries/ar ...

  5. RabbitMQ--Publish/Subscribe(四)

    先前例子中,我们创建了一个简单的日志系统,广播messages到consumer接收方. 但如果有日志错误级别的,不同的consumer接收不同错误级别的信息.比如consumer1接收info和wa ...

  6. 32 Profiling Go Programs 分析go语言项目

    Profiling Go Programs  分析go语言项目 24 June 2011 At Scala Days 2011, Robert Hundt presented a paper titl ...

  7. java基础44 IO流技术(输出字节流/缓冲输出字节流)和异常处理

    一.输出字节流 输出字节流的体系: -------| OutputStream:所有输出字节流的基类(抽象类) ----------| FileOutputStream:向文件输出数据的输出字节流(把 ...

  8. 编写组件TComponent published $M+ 问题

    报错如下: PUBLISHED caused RTTI ($M+) to be added to type 修改成下面这样之后: 解决问题 方法: 来自:http://www.cnblogs.com/ ...

  9. P2184 【贪婪大陆】

    看到全是线段树或者树状数组写法,就来提供一发全网唯一cdq分治三维偏序解法吧 容易发现,这个题的查询就是对于每个区间l,r,查询有多少个修改区间li,ri与l,r有交集 转化为数学语言,就是查询满足l ...

  10. gcc/g++ 命令

    gcc & g++现在是gnu中最主要和最流行的c & c++编译器 .g++是c++的命令,以.cpp为主,对于c语言后缀名一般为.c.这时候命令换做gcc即可.其实是无关紧要的.其 ...