最开始在牛腩新闻发布系统中接触到JavaScript,只是知道一句话它是一种客户端的脚本语言,常用于表单的验证和给HTML网页添加动态效果。到了学习JavaScript牛腩所讲视频时,认识到JavaScript有所有语言的公共特征:变量、数据类型、三大基本结构等。但那时依然没有意识到它是一种面向对象的语言。再往后,认识到JavaScript是面向对象的,但它的面向对象似乎有很多的不同点,它是基于原型的面向对象。
总是停留在它很不同的这样一个层面上,它到底哪里不同想一想又不知道。现在我倒觉得我是不知道JavaScript是什么。以前我们学过VB、C++、C#、VB.NET以及ASP.NET,现在又学了JavaScript,他们都属于什么类型的语言,那么不同又在哪里?
我们都知道编程的语言有很多种,那么必然它们的分类也是多种多样的。
(1)从高级和低级的角度分,可以有机器语言、编译语言和高级语言。
(2)从动态和静态的角度分。
动态语言:Perl、Python、Ruby...都是超级脚本语言。
脚本语言:Tcl、JavaScript、VbScript、ASP、PHP、Bat、Shell...(脚本语言需要解释器运行)
宏语言可视为脚本语言的分支,两者也有实质上的相同之处。
HTML,内嵌网页的脚本语言,浏览器就是解释器。
静态语言:VB、C++、C#、Java等。
(3)从面向对象和面向过程角度分为三类:纯面向过程的有C、Fortran、Cobol、Algol、Pascal;纯面向对象的Java、SmallTalk;两者兼有的C++、Python。
从分类可知:JavaScript和ASP.NET是脚本语言(动态语言)而VB、C#、Java等属于静态语言。
动态类型语言:在运行期间检查数据的类型的语言。用这类语言编程,不会给变量指定类型,而是在附值时得到数据类型。静态类型语言是在运行前编译时检查类型。在写代码时,每声明一个变量必须指定类型。比如C#就是一个静态类型语言,静态类型语言为了达到多态会采取一些类型鉴别手段,如继承、接口,而动态类型语言却不需要,所以一般动态语言都会采用dynamic typing,常出现于脚本语言中。
静态类型语言的主要优点在于其结构非常规范,便于调试,方便类型安全;缺点是为此需要写更多的类型相关代码,导致不便于阅读、不清晰明了。动态类型 语言的优点在于方便阅读,不需要写非常多的类型相关的代码;缺点自然就是不方便调试,命名不规范时会造成读不懂,不利于理解等。
JavaScript是一种脚本语言,脚本语言又是什么?
(1)脚本语言代表一套与系统程序设计语言不同的协定。它们牺牲执行速度和与系统程序设计语言相关的类型长度而提供更高的编程创作力和软件重用。为了简化连接组件的工作, 脚本语言被设计为无类型的,脚本语言一般是面向字符的,因为字符为许多不同的事物提供了一致的描述。
(2)脚本语言不需要编译,一般都有相应的脚本引擎来解释执行。他们一般需要解释器才能运行。脚本程序在执行时,是由系统的一个解释器,将其一条条的翻译成机器可识别的指令,并按程序顺序执行。因为脚本在执行时多了一道翻译的过程,所以它比二进制程序执行效率要稍低一些。
(3)服务器端脚本首先在服务器进行解释执行,将得到的结果转换成html流进行输出,客户端脚本由服务器下载到客户的ie中,由客户的ie执行。
(4)基本客户端浏览器都有JavaScript脚本解释及VBScript脚本解释器,各种浏览器的版本更新除了更改性能,同时也增强了脚本识别能力。
以上所有介绍的内容,我们知道JavaScript是一种弱实体、基于原型的面向对象的脚本语言。下面介绍一些专属于JavaScript的知识。
JavaScript实现
一个完整的JavaScript的实现如图中三个不同部分组成。
ECMAScript是核心,它仅仅是一个描述,定义了脚本语言的所有属性、方法和对象。其他语言(比如JavaScript)可以实现ECMAScript来作为功能的基准。每个浏览器都有自己的ECMAScript接口的实现,然后这个实现可以被扩展,包含了DOM、BOM。
DOM是文档对象模型,是HTML和XML的应用程序接口。DOM将把整个页面规划成由节点层级构成的文档。
BOM是浏览器对象模型,可以对浏览器窗口进行访问和操作。使用BOM,开发者可以移动窗口、改变状态栏中的文本以及执行其他与页面内容不直接相关的动作。
这三部分就是学习JavaScript的关键。以后的博客中详细地介绍。