BOM
  ECMAScript是JavaScript的核心,但如果要在Web中使用JavaScript,那么BOM(浏览器对象模型)则无疑才是真正的核心,BOM提供了很多对象,用于访问浏览器的功能,这些功能与任何网页内容无关,那么,什么是BOM呢?我们可以从这几点解析一下:
1.BOM是Browser Object Model的缩写,简称浏览器对象模型。这个对象就是window
2.BOM提供了独立于内容而与浏览器窗口进行交互的对象,也就是BOM是浏览器厂家分别推出
3.BOM由一系列相关的对象构成,并且每个对象都提供了很多方法与属性
4.BOM缺乏标准,但是BOM提供了ECMAScript的运行平台
5.BOM最初是Netscape浏览器标准的一部分
6.BOM主要用于管理窗口与窗口之间的通讯,因此其核心对象为window
 
window对象
  浏览器:可以运行html+css+js的一个环境,这个环境有很多种,所以会产生很多的兼容问题。大 部分浏览器把自己的大部分功能都抽象出来描述成一个对象,这个对象叫window,window对象是浏览器内置的一个对象,是js中全局对象的寄存地,相当于BOM的一个抽象。在浏览器中,window对象有双重角色,它既是通过JavaScript访问浏览器窗口的一个接口,又是ECMAScript规定的一个Global对象,因此有权访问parseInt()等方法。
window对象表示浏览器的一个实例,这就意味着全局作用域中声明的变量、函数都会变成window对象的属性和方法,例如:
var age = 29;
function sayAge(){
return "123";
}
console.log(age === window.age); //true
console.log(sayAge === window.sayAge); //true
  我们可以看到,全局变量age其实就是window.age,而全局函数sayAge就是window.sayAge,只不过window可以省略不写,我们写的全局变量和函数其实都会自动归在window对象名下,那么我们再来验证一下:
console.log(parseInt === window.parseInt);                  //true
console.log(parseFloat === window.parseFloat); //true
console.log(setInterval === window.setInterval); //true
console.log(setTimeout === window.setTimeout); //true
console.log(clearInterval === window.clearInterval); //true
console.log(clearTimeout === window.clearTimeout); //true
console.log(Number === window.Number); //true
console.log(Date === window.Date); //true
console.log(String === window.String); //true
console.log(isNaN === window.isNaN); //true

这些都是我们常用的内置函数,它们也都属于window对象

【注】抛开全局变量会变成window对象的属性不说,定义全局变量与在window对象上面直接定义属性还是有区别的,区别就是全局变量不能通过delete操作符删除,而直接在window对象上定义的属性可以:
var age = 18;                           //定义全局变量
window.name = "AI-fisher"; //在window对象上定义变量(属性) //在IE<9时抛出错误,其他浏览器返回false
delete window.age; //删除全局变量
//在IE<9时抛出错误,其他浏览器返回true
delete window.name; //删除window对象上定义的变量 console.log(window.age); //
console.log(window.name); //undefined

  内部实现的规则是:var语言添加的window属性有一个名为[[Configurable]]的特性,这个特性的值被设置为false,因此这样定义的属性不可以通过delete操作符删除。IE8及更早版本在遇到使用delete删除window属性的语句时,不管该属性最初是如何创建的,都会抛出错误,以示警告。IE9及更高版本不会抛出错误。

属性(窗口位置):
  用来确定和修改window对象位置的属性和方法有很多。有些浏览器使用screenTop和screenLeft来表示窗口相对于屏幕左边和上边的位置,比如:IE和Opera。有些浏览器则使用screenX和screenY属性,比如Firefox。而有些浏览器两种都支持,比如:Safari和Chrome。
方法:
alert(要显示的文本);      //弹出信息框
prompt(提示对话框信息); //弹出输入框,点击确定,返回字符串,点击取消,返回null
confirm(提示文字); //点击确定返回true,点击取消返回false
//关闭浏览器,火狐不支持,但都支持通过别的网页打开的新的网页关闭,不允许关闭非脚本打开的页面
close();
open(url,name,feature,replace);
//url,可选,要在新窗口中显示的文档的URL
//name,可选,声明了新窗口的名称
//feature,replace自行扩展
//谷歌会默认把系统自动打开的新网页阻止掉,但不阻止通过事件打开的网页

子对象

  • history对象(包含浏览器访问过的url)
history对象保存着用户上网的历史记录,从窗口被打开的那一刻算起,因为history是window对象的属性,因此每个浏览器窗口、每个标签页乃至每个框架,都有自己的history对爱那个与特定的window对象关联。处于安全方面的考虑,开发人员无法得知用户浏览过的URL。不过,借由用户访问过的页面列表,同样可以在不知道实际URL 的情况下实现后退和前进。
 
属性
history.length;      //返回历史记录的数量
方法
history.back();      //后退,加载前一个url。
history.forward(); //前进,需要后退一下之后,才有前进的方向
history.go(num); //参数为正,前进相应的数目,为负,后退相应的数目,为0,刷新
  • location对象(包含当前url的相关信息,而history对象不能具体反映url的相关信息)
  location对象是最有用的属性之一,它提供了与当前窗口中加载的文档有关的信息,还提供了一些导航功能。事实上,location对象是很特别的一个对象,因为它既是window对象的属性,也是document对象的属性;换句话说,window.location和document.location引用的是同一个对象。location对象的用处不只是表现在他保存着当前文档的信息,还表现在它将URL解析为独立的片段,让开发人员可以通过不同的属性来访问这些片段。
属性
方法
assign()方法可以立即打开新URL并在浏览器的历史记录中生成一条记录。
location.assign(url);   //加载新页面,当url为空字符时,加载当前页面
如果将location.href或window.location设置为一个URL值,也会以该方法调用assign()方法。。例如:下列两行代码与显示调用assign()方法的效果完全一样。
window.location = "http://www.baidu.com";
location.href = "http://www.baidu.com";
  跟位置有关的最后一个方法是reload()方法,作用是重新加载当前显示的页面,如果调用reload()时不穿敌人和参数,页面就会以最有效的方式重新加载。也就是说,如果页面自上次请求以来并没有改变过,页面就会从浏览器缓存中重新加载。
location.reload();
如果要强制从服务器重新加载,则需要像下面这样为该方法传递参数true
location.reload();  //传递一个true,不使用缓存刷新
  • navigator对象(浏览器信息):
属性
navigator.appName;   //返回当前浏览器的名称
navigator.appVersion;//返回当前浏览器的版本号
navigator.platform;  //返回当前计算机的操作系统
以上方法已经在逐渐被抛弃,出现一个新的属性替代这些属性:
navigator.userAgent; //返回浏览器信息
  • frames对象:包含当前页面所有的框架信息
属性
 frames.length;                  //返回当前页面的框架数量
frames[0].location; //修改第一个框架的地址
  • screen对象:包含当前显示屏信息
  JavaScript中有几个对象在编程中用处不大,而screen对象就是其中之一。screen对象基本上只用来表明客户端的能力,其中包括浏览器窗口外部的显示器的信息,如像素宽度和高度等。每个浏览器总的screen对象都包含着各不相同的属性。下面列出几个属性是相对来说比较实用而且各浏览器都支持的属性。
属性
 screen.width/height             //屏幕总宽高度
screen.availWidth/availHeight //屏幕的宽高(不包括任务栏)
 

剑指前端(前端入门笔记系列)——BOM的更多相关文章

  1. 每天成长一点---WEB前端学习入门笔记

    WEB前端学习入门笔记 从今天开始,本人就要学习WEB前端了. 经过老师的建议,说到他每天都会记录下来新的知识点,每天都是在围绕着这些问题来度过,很有必要每天抽出半个小时来写一个知识总结,及时对一天工 ...

  2. 《剑指offer》解题笔记

    <剑指offer>解题笔记 <剑指offer>共50题,这两周使用C++花时间做了一遍,谨在此把一些非常巧妙的方法.写代码遇到的难点.易犯错的细节等做一个简单的标注,但不会太过 ...

  3. 《剑指offer》读书笔记

    二叉树 重建二叉树 面试题6:(p55) 题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树. 假设输入的前序遍历和中序遍历的结果中都不含重复的数字. 例如输入前序遍历序列{1, 2, 4 ...

  4. 剑指前端(前端入门笔记系列)——DOM(元素大小)

    DOM——元素大小   DOM中没有规定如何确定页面中与元素的大小,IE率先映入了一些属性来确定页面中元素的大小,以便开发人员使用,目前,所有主要的浏览器都已经支持这些属性了.   1.偏移量(单位为 ...

  5. 剑指前端(前端入门笔记系列)——DOM(属性节点)

    DOM(属性节点) 属性节点没有过参加家族关系中,其专用选择器:attributes,返回值为对象的形式,它的键是索引值,也就是用对象模拟了一个伪数组,DOM中选择器返回的都是伪数组(可以使用数组的形 ...

  6. 剑指前端(前端入门笔记系列)—— JS基本数据类型及其类型转换

    基本数据类型 ECMAScript中有5中简单数据类型性(也称为基本数据类型):Undefined.Null.Boolean.Number和String,还有一种复杂数据类型——Object,Obje ...

  7. 剑指前端(前端入门笔记系列)——DOM(元素节点)

    DOM(元素节点) 本文介绍了元素节点的基本操作:增删改查   增 新增一个元素节点分为两步(二者缺一不可),第一步:创建元素节点,第二步:将创建的元素节点插入到指定元素节点中(也就是插入指定元素节点 ...

  8. 剑指前端(前端入门笔记系列)——Math对象

    Math对象 ECMAScript将一些常用的数学公式和信息封装到了一个对象中——Math对象,为我们实现数学方面的计算功能提供了便捷,而且该对象还提供了辅助完成这些计算的属性和方法   属性 con ...

  9. 剑指前端(前端入门笔记系列)——DOM(基本组成与操作)

    DOM——基本组成与操作 DOM是针对HTML和XML文档的一个API(应用程序编程接口).DOM描绘了一个层次化的节点树,允许开发人员添加.移除和修改页面的某一部分.他给文档提供了一种结构化的表达方 ...

随机推荐

  1. Django 缓存配置的多种方式

    django 的缓存配置有多种方式,主要包含以下几种: 1.开发调试模式 2.内存模式 3.使用文件 4.直接使用数据库 5.使用redis或者memcache 这里主要是记录一下那些不常用,但是在微 ...

  2. Python 模块A

    模块的四种形式 自定义模块,例如自己定义的common.py就叫common模块 内置模块:python解释器自带的,不需要安装 第三方模块:需要自己安装,13万个库,无所不能,写库(弄得更简单) 包 ...

  3. JQuery$.extend()用法

    1.合并多个对象. <span style="font-size:18px;">//用法: jQuery.extend(obj1,obj2,obj3,..) var C ...

  4. 【MyEclipse异常】更换工作空间无法启动的异常

  5. struts2学习1

    struts2使用优势 自动封装参数 参数校验 结果的处理(转发|重定向) 国际化 显示等待页面 表单的防止重复提交 struts2具有更加先进的架构以及思想 使用拦截器 struts2的历史 str ...

  6. django -- ORM查询

    前戏 在我们之前操作ORM中,你也许是启动Django项目,通过地址访问固定的函数,或者在pycharm里的python console里执行,第一种比较麻烦,而且每次都要启动项目,写路由,第二种虽然 ...

  7. Echarts数据更新大坑

    今天使用了一个Echarts来实现柱状图和直线图统计组合,每次通过axios(ajax库)来请求新数据来刷新数据,但是发现请求数据确实是对应变化到了options变量中,后台数据条数只有一条,但是图表 ...

  8. uname 命令简介

    [root@localhost root]# uname --help Usage: uname [OPTION]... Print certain system information. With ...

  9. kaggle house price

    kaggle 竞赛入门 导入常用的数据分析以及模型的库 数据处理 Data fields 去除异常值 处理缺失值 分析 Utilities Exploratory Data Analysis Corr ...

  10. c# winform button文字偏了

    winform button文字偏了,解决方案来自 疯狂青蛙: http://www.cnblogs.com/cadlife 要用这个属性