ECMAScript是JS的核心

但是对于在浏览器中运行的JS,BOM显然才是真正的核心

我们知道JS是由三个部分组成的 BOM、DOM、ECMAScript

之前的文章我们主要介绍的是ECMAScript

也就是JS的核心语法

但是JS作为一种脚本语言,其创建的初衷不就是为了控制浏览器中的页面的表现形势嘛

所以JS与浏览器的交互由什么控制呢?

当然就是我们的BOM了(浏览器对象模型)

BOM提供了一系列的对象用于访问浏览器的功能,由于各个厂商会按照各自的想法去拓展它

所以只有其中的一部分被标准化,并被纳入HTML5规范

下面我们就来聊聊标准化的这些内容

Window对象

Bom对象的核心是window,在浏览器环境中这个对象除了是JS访问浏览器功能的接口对象外

还是JS的Global对象,parseInt等全局方法在浏览器环境中也就属于window对象

由于window对象也是浏览器环境中的全局对象

所以全局变量和全局方法最终都会是 window 对象的属性和方法

不过要注意的地方在于,为window对象定义属性,和声明全局变量是有区别的

看以下代码

var a = 10;
window.b = 10;

虽然变量 a 可以通过window.a 进行访问

但是我们不能通过 delete 操作符来删除 window.a

却可以删除 window.b

这是因为虽然全局变量会作为 window对象的属性,但是这个属性有个特点

那就是这个属性的特性 [[Configurable]] 是false,所以我们不能通过delete来删除它

这也是浏览器环境中所有全局变量,储存在window对象上的特点

窗口关系及框架

如果你的浏览器中包含框架(另外的窗口),那么每个窗口都有自己的window对象

每个window对象都有frames属性,该属性的值为一个数组

window.frames 数组中我们可以访问所有的window对象

这些框架的索引从0开始,从左到右,从上到下增加

每个 window 都有一个name属性,也就是当前框架的名称

也可以在 frames 数组中通过window的name进行索引

为了避免层级关系的混淆,Bom还有 top、parent对象

top指向当前的框架最顶层,也就是浏览器窗口

而 parent 指向当前窗口的父级框架

有时候 top会等于parent

但在不包含框架的页面中 top 一定等于 parent

除此而外还有个 self 用于标识当前window,但是只是为了与top、parent对应,并没有什么特殊的功能

PS. 由于框架之间的window 对象是独立的,所以都拥有独立的构造函数,所以 a窗口的Array类型不等于b窗口的Array类型

窗口位置

除火狐而外的浏览器都通过 screenLeft、screenTop来提供当前窗口相对于屏幕的坐标

火狐使用 screenX、screenY来提供相应属性

跨浏览器兼容如下

var left = (typeof window.screenLeft ==="number")?window.screenLeft:window.screenX;
var top = (typeof window.screenTop ==="number")?window.screenTop:window.screenY;

moveTo(x,y) 将窗口移动到屏幕的指定位置

moveBy(x,y)窗口水平移动x,垂直移动y

要注意的是上述方法虽然可以移动浏览器窗口,但绝大多数情况下都会被浏览器禁用

窗口大小

由于获取浏览器窗口的大小,各个浏览器实现、行为各异

所以就不多说

主要说明一下获取可视区域的大小

var pageWidth = window.innerWidth;
var pageHeight = window.innerHeight; if(typeof pageWidth !=="number"){
if(document.compatMode ==="CSS1Compat"){
pageWidth = document.documentElement.clientWidth;
pageHeight = document.documentElement.clientHeight;
}else{
pageWidth = document.body.clientWidht;
pageHeight = document.body.clinetHeight;
}
}

这里也有两个方法控制窗口大小

resizeTo()

resizeBy()

使用和上面的move类似to是移动到某个坐标,by是朝垂直和水平分别移动多少

当然,这两个方法也很有可能被浏览器禁用

今天就先介绍这么多,明天继续~~~

Javascript高级编程学习笔记(27)—— BOM(1)window对象1的更多相关文章

  1. Javascript高级编程学习笔记(18)—— 引用类型(7)单体内置对象

    什么是内置对象呢? js高级程序设计中给出的定义为:由ES规定不依赖于宿主环境的对象,这些对象在JS执行前就已经存在 前面我们介绍的引用类型都是内置对象 除了这些对象外ECMA还规定了两个单体内置对象 ...

  2. Javascript高级编程学习笔记(31)—— BOM(5)screen、history对象

    screen对象 screen对象应该是BOM对象中最不常用的对象了 其主要用于提供客户端的显示能力信息 包括浏览器外部显示的信息,和像素的宽高等 这个对象的主要用于检测客户端能力,一般不会影响功能 ...

  3. Javascript高级编程学习笔记(30)—— BOM(4)navigator对象

    window对象作为浏览器的全局对象.location对象保存了页面的url信息 那么navigator对象又有什么作用呢? navigator对象 该对象最早由 Netspace Navigator ...

  4. Javascript高级编程学习笔记(29)—— BOM(3)location对象

    在JS中location是一个神奇的对象 它既是window对象的属性,也是document对象的属性 它的作用主要在于保存当前文档页面的信息,以及将 url 解析为独立的片段 location对象属 ...

  5. Javascript高级编程学习笔记(28)—— BOM(2)window对象2

    今天讲一下window对象和浏览器导航,弹窗等有关的内容 导航和打开窗口 window.open() 用于导航到某个特定 url 该方法接收四个参数 1.url 2.窗口目标(当页面中有多个框架fra ...

  6. Javascript高级编程学习笔记(1)—— JS简介

    此系列文章,用于记录所学,如有错误欢迎指出. Javascript组成 1.核心(ECMAScript) 2.文档对象模型(DOM) 3.浏览器对象模型(BOM) 1.核心(ECMAScript) E ...

  7. Javascript高级编程学习笔记(35)—— DOM(1)节点

    DOM JS由三部分组成 1.BOM 2.DOM 3.ECMAScript ES和BOM在前面的文章已经介绍过了 今天开始JS组成的最后一部分DOM(文档对象模型) 我们知道,JS中的这三个部分实际上 ...

  8. Javascript高级编程学习笔记(3)—— JS中的数据类型(1)

    前一段时间由于事情比较多,所以笔记耽搁了一段时间,从这一篇开始我会尽快写完这个系列. 文章中有什么不足之处,还望各位大佬指出. JS中的数据类型 上一篇中我写了有关JS引入的Script标签相关的东西 ...

  9. JavaScript高级编程学习笔记(第三章之一)

    继续记笔记,JavaScript越来越有意思了. 继续... 第三章:JavaScript基础 ECMAScript语法在很大程度上借鉴了C和其它类似于C的语言,比如Java和Perl. 大小写敏感: ...

随机推荐

  1. 查看 设置mysql时区

    # 查看时区 show variables like '%time_zone%'; system_time_zone CST time_zone SYSTEM # 设置全局 set global ti ...

  2. java maven compiler设置默认1.8

    方法一: <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupI ...

  3. 刷shipid 简便方法

    将表中的数据手动更改: select * from cmpps025 where  pino = ''; insert into cmpps025 select ncmp, pino, pono, i ...

  4. memcache集群

    实现memcache集群   一:memcache本身没有redis锁具备的数据持久化功能,比如RDB和AOF都没有,但是可以通过做集群的方式,让各memcache的数据进行同步,实现数据的一致性,即 ...

  5. Java学习笔记:多线程(二)

    与线程生命周期相关的方法: sleep 调用sleep方法会进入计时等待状态,等待时间到了,进入就绪状态. yield 调用yield方法会让别的线程执行,但是不确保真正让出.较少使用,官方注释都说 ...

  6. Android 系统启动过程简单记录

    本文记录Android系统启动过程,包含从linux kernerl到luancher启动完成的过程: 1.linux内核完成系统设置后,会在系统文件中寻找‘init’文件,然后启动root进程或者说 ...

  7. 初步了解学习flask轻量级框架,

    关于flask我有话说 flask作为一个轻量级框架,它里面有好多扩展包需要下载,比较麻烦,而且有的时候flask需要在虚拟环境下运行,但是他的优点还是有滴 ,只要是用过Django的人,都会觉得fl ...

  8. 02.02.03第3章 餐饮项目案例(Power BI商业智能分析)

    02.02.03第3章 餐饮项目案例 02.02.03.01餐饮数据理解与读入 00:06:12 02.02.03.02餐饮数据处理 00:29:57 处理生成的表为: 02.02.03.03餐饮数据 ...

  9. bootstrap的引用和注意事项

    1,在https://v3.bootcss.com/getting-started/#download下载bootstrap的压缩包: 2,将压缩包解压到自己的工程文件中,会得到如下结果: 3,打开这 ...

  10. Notes on Distributed System -- Distributed Hash Table Based On Chord

    task: 基于Chord实现一个Hash Table 我负责写Node,队友写SuperNode和Client.总体参考paper[Stoica et al., 2001]上的伪代码 FindSuc ...