《重温javascript》这是一系列 javascript 的学习笔记,部分内容摘自书本或者网络,我这里只是基于自己的理解进行了梳理整理。

一个完整的 javscript 实现是由以下3部分组成的 :

  • 核心 ECMAScript

  • 文档对象模型 DOM

  • 浏览器对象模型 BOM


ECMAScript

ECMAScript 并不与任何具体浏览器绑定,实际上,它没有提到用于任何用户输入输出的方法。

ECMAScript 可以为不同种类的宿主环境提供核心的脚本编程能力,因此核心的脚本语言是与任何特定的宿主环境分开进行规定的

WEB 浏览器对于 ECMAScript 来说是一个宿主环境,但它并不是唯一的宿主环境。事实上,还有不计其数的其他各种环境可以容纳 ECMAScript 的实现。

ECMAScript 描述了如下内容:语法、类型、语句、关键字、保留字、运算符、对象;

ECMAScript 仅仅是一个描述,定义了脚本语言的所有属性、方法和对象。其他的语言可以实现 ECMAScript 来作为功能的基准,javascript 就是这样。

何为 EMCAScript 复合型(conformance)有明确的定义。一个脚本语言必须满足以下四项基本原则:

符合的实现必须按照 ECMA-262 中所描述的支持所有的“类型、值、对象、属性、函数和程序语法及语义“。

DOM

DOM (文档对象模型)是 HTML 和 XML 的应用程序接口(API)。DOM 将把整个页面规划成由节点层级构成的文档。HTML 或 XML 页面的每个部分都是一个节点的衍生物。

DOM 通过创建树来表示文档,从而使开发者对文档的内容和机构具有空前的控制力。用 DOM API 可以轻松的删除、添加和替换节点。

DOM Level 1 是 W3C 于 1089 年 10 月提出的。他有两个模块构成,即 DOM Core 和 DOM HTML 。前者提供了基于 XML 的文档的结构图,以便方便访问和操作文档的任一部分;后者添加了一些 HTML 专用的对象和方法,从而扩展了 DOM Core 。

DOM Level 2 对原始 DOM 的扩展添加了对鼠标和用户界面事件(DHTML 对此有丰富的支持)、范围、遍历(重复执行 DOM 文档的方法)的支持,并通过对象接口添加了对 CSS (层叠样式)的支持。由 DOM Level 1 引入的原始 DOM Core 也加入了对 XML 命名空间的支持。

DOM Level 2 引入几种 DOM 新模块,用于处理新的接口类型:

  1. DOM 视图 —— 描述跟踪该文档的各种视图(即 CSS 样式化之前和 CSS 样式化之后的文档)的接口;

  2. DOM 事件 —— 描述事件的接口;

  3. DOM 样式 —— 描述处理基于 CSS 样式的接口;

  4. DOM 遍历和范围 —— 描述遍历和操作文档书的接口。

DOM Level 3 引入了统一的方式载入和保存文档的方法(包含在新模块 DOM Load and Save 中)以及验证文档(DOM Validation)的方法,从而进一步扩展了 DOM 。在 DOM Level 3 中,DOM Core 被扩展为支持所有的 XML 1.0 特性,包括 XML Infoset 、XPath 和 XML Base。


其他DOM

除了 DOM CORE 和 DOM HTML 外,还有其他语言发布了自己的 DOM 标准。这些语言都是基于 XML 的,每种 DOM 都给对应语言添加了特有的方法和接口:

  1. 可缩放矢量图形(SVG)1.0

  2. 数学标记语言 (MathML)1.0

  3. 同步多媒体集成语言(SMIL)

此外,其他语言也开发了自己的 DOM 实现,如 Mozilla 的 XML 用户界面语言。不过,只有上面列出的几种语言是 W3C 的推荐标准。

DOM 在浏览器开始实现之前就已经是一种标准了。IE 首次尝试支持 DOM 是在 5.0 版本中,不过其实直到 5.5 版本才具有真正的 DOM 支持,IE5.5 实现了 DOM Level 1 。从那时起,IE就没有再引入新的 DOM 功能。

NetScape 知道 NetScape6(Mozilla 0.6.0)才引入 DOM 支持。目前 ,MOZILLA 具有最好的 DOM 支持,实现了完整的 DOM Level 1 、几乎所有的 DOM Level 2 以及一部分DOM Level 13。

就对DOM的支持而论,所有浏览器都远远落后于 mozilla。

BOM

IE3.0 和 Netscape Navigator 3.0 提供了一种新特性 —— BOM (浏览器对象模型),可以对浏览器窗口进行访问和操作。使用 BOM,开发者可以移动窗口、改变状态栏的文本以及执行其他与页面内容不直接相关的动作。使 BOM 独树一帜且又常常令人怀疑的地方在于,它只是 javascript 实现的一部分,没有任何相关的标准。

BOM 主要处理浏览器窗口和框架,不过通常浏览器特定的 javascript 扩展都被看做 BOM 的一部分。这些包括:

  1. 弹出新的浏览器窗口

  2. 移动、关闭浏览器窗口以及调整窗口大小

  3. 提供WEB 浏览器详细信息的导航对象

  4. 提供装载到浏览器中页面的详细信息的丁文对象

  5. 提供用户屏幕分辨率详细信息的屏幕对象

  6. 对 COOKIE 的支持

  7. IE 扩展了BOM ,加入了activexobject类,可以通过javascript实例化activex对象。

由于没有相关的BOM标准,每种浏览器哦独有自己的BOM实现。有一些事实上的标准,如具有一个窗口对象和一个导航对象,不过每种浏览器可以为这些对象或其他对象定义自己的属性和方法。

JavaScript高级编程 (1) - javscript是什么的更多相关文章

  1. javascript高级编程笔记01(基本概念)

    1.在html中使用JavaScript 1.  <script> 元素 <script>定义了下列6个属性: async:可选,异步下载外部脚本文件. charset:可选, ...

  2. JavaScript高级编程———JSON

    JavaScript高级编程———JSON < script > /*JSON的语法可以表达一下三种类型的值 简单值:使用与javas相同的语法,可以在JSON中表达字符串.数值.布尔值和 ...

  3. JavaScript高级编程———基本包装类型String和单体内置对象Math

    JavaScript高级编程———基本包装类型和单体内置对象 <script> var stringObject = new String("hello world") ...

  4. JavaScript高级编程——Date类型

    JavaScript高级编程——Date类型 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml" ...

  5. JavaScript高级编程——Array数组迭代(every()、filter()、foreach()、map()、some(),归并(reduce() 和reduceRight() ))

    JavaScript高级编程——Array数组迭代(every().filter().foreach().map().some(),归并(reduce() 和reduceRight() )) < ...

  6. JavaScript高级编程——引用类型、Array数组使用、栈方法

    JavaScript高级编程——引用类型.Array数组使用.栈方法 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999 ...

  7. JavaScript高级编程———数据存储(cookie、WebStorage)

    JavaScript高级编程———数据存储(cookie.WebStorage) <script> /*Cookie 读写删 CookieUtil.get()方法根据cookie的名称获取 ...

  8. JavaScript高级编程(一)

    书中第2章,在HTML中使用JavaScript摘要总结 2.1 <script>元素 <script>中的5个属性:charset:可选.表示通过src属性指定的代码的字符集 ...

  9. JavaScript高级编程II

         原文地址: http://www.onlamp.com/pub/a/onlamp/2007/08/23/advanced-javascript-ii.html?page=1 在前面的文章中, ...

随机推荐

  1. Akka.net路径里的user

    因为经常买双色球,嫌每次对彩票号麻烦,于是休息的时候做了个双色球兑奖的小程序,做完了发现业务还挺复杂的,于是改DDD重做设计,拆分服务,各种折腾...,不过这和本随笔没多大关系,等差不多了再总结一下, ...

  2. sublime常用快捷键

    自己觉得比较实用的sublime快捷键: Ctrl + /  ---------------------注释 Ctrl + 滚动 --------------字体变大/缩小 Ctrl + N----- ...

  3. ExtJS 4.2 介绍

    本篇介绍ExtJS相关知识,是以ExtJS4.2.1版本为基础进行说明,包括:ExtJS的特点.MVC模式.4.2.1GPL版本资源的下载和说明以及4种主题的演示. 目录 1. 介绍 1.1 说明 1 ...

  4. 如何利用ansible callback插件对执行结果进行解析

    最近在写一个批量巡检工具,利用ansible将脚本推到各个机器上执行,然后将执行的结果以json格式返回来. 如下所示: # ansible node2 -m script -a /root/pyth ...

  5. C++随笔:.NET CoreCLR之GC探索(3)

    有几天没写GC相关的文章了哈,今天我讲GC的方式是通过一个小的Sample来讲解,这个小的示例代码只有全部Build成功了才会有.地址为D:\coreclr2\coreclr\bin\obj\Wind ...

  6. 代码的坏味道(20)——过度耦合的消息链(Message Chains)

    坏味道--过度耦合的消息链(Message Chains) 特征 消息链的形式类似于:obj.getA().getB().getC(). 问题原因 如果你看到用户向一个对象请求另一个对象,然后再向后者 ...

  7. (翻译)FIFO In Hardware

    翻译一些自己觉得有价值的材料,工作中碰到英语大多数是读,基本没有写或者翻的,翻得不好不到位的敬请指摘. 同时也附原文以供参考. http://electronics.stackexchange.com ...

  8. 海鑫智圣:物联网漫谈之MQTT协议

    什么是MQTT协议 MQTT(消息队列遥测传输协议)是IBM在1999年专门针对物联网等应用场景来制订的轻量级双向消息传输协议,它主要是为了解决物联网上使用到的设备的互相通信的问题,以及这些设备与后端 ...

  9. Spark Streaming+Kafka

    Spark Streaming+Kafka 前言 在WeTest舆情项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消费者一端, ...

  10. JavaScript中undefined与null的区别

    通常情况下, 当我们试图访问某个不存在的或者没有赋值的变量时,就会得到一个undefined值.Javascript会自动将声明是没有进行初始化的变量设为undifined. 如果一个变量根本不存在会 ...