热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

JavaScript高级程序设计(第一章)

目录1.JavaScript简介1.1JavaScript历史回顾历史进程:1.2ECMA和ECMASrcipt1.3JavaScript实现1.3.1ECMAS

目录

 

1.Javascript简介

 1.1Javascript历史回顾

历史进程:

1.2ECMA和ECMASrcipt

 1.3Javascript实现

 1.3.1 ECMAScript

1.3.2什么是 ECMAScript兼容 ?

1.3.3各大浏览器对ECMA的兼容

1.4DOM

1.4.1DOM级别

1.4.2 Web浏览器对 DOM的支持 

1.5BOM浏览器对象模型




1.Javascript简介


 1.1Javascript历史回顾

Javascript诞生于 1995年。当时,它的主要目的是处理输入验证操作。在 Javascript 问世之前,必须把表单数据发送到服务器端才能确定用户是否 没有填写某个必填域,是否输入了无效的值。Netscape Navigator希望通过 Javascript来解决这个问题。 

如今,Javascript的用途早 已不再局限于简单的数据验证,而是具备了与浏览器窗口及其内容等几乎所有方面交互的能力。 

历史进程:

Netscape公司为Navigator浏览器开发的的liveScript语言,

为了搭上Sun公司java语言(媒体热炒)的顺风车,改名为Javascript。

微软的浏览器(IE)为了和Navigator浏览器竞争,向自家浏览器加入了名为Jscript(与Javascript区分)的脚本语言。

Netscape的Javascript,微软的JScript。


1.2ECMA和ECMASrcipt

ECMA(协会):欧洲计算机制造商协会(European Computer Manufacturers Association)。该协会指定 39号技术委员会(TC39,Technical Committee #39) 负责“标准化一种通用、跨平台、供应商中立的脚本语言的语法和语义”。

ECMA-262(标准):——定义一种名为 ECMAScript(发 音为“ek-ma-script”)的新脚本语言的标准。

 ECMAScript(脚本语言):是一种由ECMA通过ECMA-262标准化的脚本程序设计语言。

ECMAScript是Javascript的核心,而不是Javascript的全部。


 1.3Javascript实现

虽然 Javascript 和 ECMAScript 通常都被人们用来表达 相同的含义,但 Javascript的含义却比 ECMA-262中规定的 要多得多。没错,一个完整的 Javascript 实现应该由下列三 个不同的部分组成(见图 1-1)。

 核心(ECMAScript)  文档对象模型(DOM)  浏览器对象模型(BOM) 


 1.3.1 ECMAScript

ECMA-262(一个标准)定义的 ECMAScript与 Web 浏览器没有依赖关系。这门语言本身并不包含输 入和输出定义。ECMA-262定义的只是这门语言的基础,而在此基础之上可以构建更完善的脚本语言。 

Web 浏览器只是 ECMAScript 实现可能的宿主环境之一。

宿主环境提供了:

1.基本的 ECMAScript 实现   

2.该语言的扩展,以便语言与环境之间对接交互。而这些扩展——如 DOM,则利用 ECMAScript的核心类型和语法提供更多更具体的功能,以便实现针对环境的操作。其他 宿主环境包括 Node(一种服务端 Javascript平台)和 Adobe Flash。

既然 ECMA-262 标准没有参照 Web 浏览器,那它都规定了些什么内容呢?

 语法  类型  语句  关键字  保留字  操作符  对象

ECMAScript就是对实现该标准规定的各个方面内容的语言的描述。

Javascript实现了 ECMAScript, Adobe ActionScript同样也实现了 ECMAScript。 


1.3.2什么是 ECMAScript兼容 

ECMA-262给出了 ECMAScript兼容的定义。要想成为 ECMAScript的实现,则该实现必须做到:


  •  支持 ECMA-262描述的所有“类型、值、对象、属性、函数以及程序句法和语义”
  •  支持 Unicode字符标准。 此外,兼容的实现还可以进行下列扩展。
  •  添加 ECMA-262没有描述的“更多类型、值、对象、属性和函数”。ECMA-262所说的这些新增 特性,主要是指该标准中没有规定的新对象和对象的新属性。
  •  支持 ECMA-262 没有定义的“程序和正则表达式语法”。(也就是说,可以修改和扩展内置的正 则表达式语法。)

上述要求为兼容实现的开发人员基于 ECMAScript开发一门新语言提供了广阔的空间和极大的灵活 性,这也从另一个侧面说明了 ECMAScript受开发人员欢迎的原因


1.3.3各大浏览器对ECMA的兼容

到了 2008年,五大主流 Web 浏览器(IE、Firefox、Safari、Chrome和 Opera)全部做到了与 ECMA-262兼容。IE8是第一个着手实现 ECMA-262第 5版的浏览器,并在 IE9中提供了完整的支持。Firefox 4也 紧随其后做到兼容


1.4DOM

文档对象模型(DOM,Document Object Model)是针对 XML但经过扩展用于 HTML的应用程序编程接口(API,Application Programming Interface)。DOM把整个页面映射为一个多层节点结构。HTML 或 XML页面中的每个组成部分都是某种类型的节点,这些节点又包含着不同类型的数据。

通过 DOM 创建的这个表示文档的树形图,开发人员获得了控制页面内容和结构的主动权。借助 DOM提供的 API,开发人员可以轻松自如地删除、添加、替换或修改任何节点。 

如果想继续保持 Web 跨平台的天性,就必须额外多做一些工作。而人们真正担 心的是,如果不对 Netscape和微软加以控制,Web 开发领域就会出现技术上两强割据,浏览器互不兼容的局面。此时,负责制定 Web 通信标准的 W3C(World Wide Web Consortium,万维网联盟)开始着 手规划 DOM。 


1.4.1DOM级别

DOM1级(DOM Level 1)于 1998年 10月成为 W3C的推荐标准

DOM1级由两个模块组成:DOM 核心(DOM Core)和 DOM HTML。其中,DOM核心规定的是如何映射基于 XML的文档结构,以便 简化对文档中任意部分的访问和操作。DOM HTML 模块则在 DOM 核心的基础上加以扩展,添加了针 对 HTML的对象和方法。 
请读者注意,DOM并不只是针对 Javascript的,很多别的语言也都实现了 DOM。 不过,在 Web浏览器中,基于 ECMAScript实现的 DOM的确已经成为 Javascript这 门语言的一个重要组成部分。 
DOM2级在 原来 DOM的基础上又扩充了(DHTML一直都支持的)鼠标和用户界面事件、范围、遍历(迭代 DOM 文档的方法)等细分模块,而且通过对象接口增加了对 CSS(Cascading Style Sheets,层叠样式表)的 支持。DOM1级中的 DOM核心模块也经过扩展开始支持 XML命名空间。 DOM2级引入了下列新模块,也给出了众多新类型和新接口的定义。  DOM视图(DOM Views):定义了跟踪不同文档(例如,应用 CSS之前和之后的文档)视图的 接口;  DOM事件(DOM Events):定义了事件和事件处理的接口;  DOM样式(DOM Style):定义了基于 CSS为元素应用样式的接口;  DOM遍历和范围(DOM Traversal and Range):定义了遍历和操作文档树的接口。

DOM3 级则进一步扩展了 DOM,引入了以统一方式加载和保存文档的方法——在 DOM 加载和保 存(DOM Load and Save)模块中定义;新增了验证文档的方法——在 DOM验证(DOM Validation)模块中定义。DOM3 级也对 DOM 核心进行了扩展,开始支持 XML 1.0 规范,涉及 XML Infoset、XPath 和 XML Base。 


1.4.2 Web浏览器对 DOM的支持 

目前,支持 DOM已经成为浏览器开发商的首要目标,主流浏览器每次发布新版本都会改进对 DOM 的支持。下表列出了主流浏览器对 DOM标准的支持情况。 


1.5BOM浏览器对象模型

Internet Explorer 3和 Netscape Navigator 3有一个共同的特色,那就是支持可以访问和操作浏览器窗 口的浏览器对象模型(BOM,Browser Object Model)。开发人员使用 BOM可以控制浏览器显示的页面 以外的部分。

而 BOM真正与众不同的地方(也是经常会导致问题的地方),还是它作为 Javascript实现 的一部分但却没有相关的标准。这个问题在 HTML5中得到了解决,HTML5致力于把很多 BOM功能写 入正式规范。HTML5发布后,很多关于 BOM的困惑烟消云散。 从根本上讲,BOM只处理浏览器窗口和框架;但人们习惯上也把所有针对浏览器的 Javascript扩展 算作 BOM的一部分。下面就是一些这样的扩展:

 弹出新浏览器窗口的功能;

 移动、缩放和关闭浏览器窗口的功能;

 提供浏览器详细信息的 navigator 对象;

 提供浏览器所加载页面的详细信息的 location 对象;

 提供用户显示器分辨率详细信息的 screen 对象;

 对 COOKIEs的支持;

 像 XMLHttpRequest 和 IE的 ActiveXObject 这样的自定义对象。

由于没有 BOM标准可以遵循,因此每个浏览器都有自己的实现。虽然也存在一些事实标准,例如 要有 window 对象和 navigator 对象等,但每个浏览器都会为这两个对象乃至其他对象定义自己的属 性和方法。现在有了 HTML5,BOM实现的细节有望朝着兼容性越来越高的方向发展。
 


推荐阅读
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • Tomcat/Jetty为何选择扩展线程池而不是使用JDK原生线程池?
    本文探讨了Tomcat和Jetty选择扩展线程池而不是使用JDK原生线程池的原因。通过比较IO密集型任务和CPU密集型任务的特点,解释了为何Tomcat和Jetty需要扩展线程池来提高并发度和任务处理速度。同时,介绍了JDK原生线程池的工作流程。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 如何基于ggplot2构建相关系数矩阵热图以及一个友情故事
    本文介绍了如何在rstudio中安装ggplot2,并使用ggplot2构建相关系数矩阵热图。同时,通过一个友情故事,讲述了真爱难觅的故事背后的数据量化和皮尔逊相关系数的概念。故事中的小伙伴们在本科时参加各种考试,其中有些沉迷网络游戏,有些热爱体育,通过他们的故事,展示了不同兴趣和特长对学习和成绩的影响。 ... [详细]
author-avatar
哎自己哈
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有