前端--关于javascript基础
首先javascript不是浏览器的附属品,只能说它大多数的运行环境是在浏览器中的,但又不仅仅局限于浏览器中。它是一门真正的程序设计语言,在这方面它和java、c、c++、c#是等同的,只不过它不直接和操作系统打交道,这也是它相比于其他语言有些特殊和看似简单的地方。这种问题的根源在于它的翻译器,因为一个语言的特性怎么样全在于它的编译器或者解释器怎么样,用字符书写的符合各种语法规则的字符串都是翻译器内在要求的外在表现。单纯的js解释器的特点就是它自己本身的能力有点小以至于除了只能仅仅是运行一遍源文件外产生不了任何副作用和输出,像ajax调用网络通信、动态改变样式、动态改变标签等这些都不是js解释器本身自己去做到的,而是js解释器通过调用与浏览器之间的一个中间层来完成的。所以单纯的纯粹的js解释器的存在似乎没有什么意义,它总是要面向一个宿主环境才有实际作用,它总是要运行在一个比操作系统更高级的平台中,正因为如此,javascript才说是具有跨平台性的。
有的地方讲到javascript由三部分组成:ECMAScript、DOM、BOM。个人认为这么划分是有失偏颇的,这样划分组成部分就把js完全限制在了浏览器中,感觉js就是浏览器的一部分并只能是浏览器的一部分,所以要先弄清楚javascript与ECMAScript、DOM、BOM之间的关系。ECMASsript、BOM、DOM这三者的性质是相同的,它们都是某一种规范,一种标准。ECMAScript规定了变量、表达式、语句、函数、对象等语法规则和特性,javascript则是对这些规则的实现。DOM和BOM就是为了html文档和浏览器的操作方便,把浏览器暴露给js解释器的接口做了同一的规范,这些规范的表现就是在不同的浏览器中可以用js调用相同的API函数来做相同的事情。因此javascript作为一门独立的程序设语言,ECMAScript已经涵盖了它的语法规则和特性,这就已经足够了。DOM和BOM并不属于javascript,它俩只是在特定的宿主环境中对js的一种拓展补充。
javascript的词法结构比较简单(词法结构就是规定了标识符什么样,怎么写注释,还有语句之间如何间隔),就是它是一门区分大小写的语言;注释用//两道斜杠或者放在/*和 */之间;它的标识符要用数字、字母、下滑下、$符号组成,并且不能和保留字和关键字冲突,开头不能是数字;空格、换行可以随便加,程序都会做恰当的忽略,这样可以写自己喜欢的布局。分号也是可选的,没有的话在一行的结尾会自动添加分号。词法结构只是告诉了我们js源程序文件应该怎么写,我们还应该知道都可以写些什么,而可以写些什么就要看程序设计语言能提供什么。一般一个程序设计语言最基本的特征就是能够提供多种数据类型,数据类型就是翻译器和人的接口,根据机器的特点和人类的认知规律抽象出来的可以用于解决实际问题的类型概念,这样也便于内存的管理并约束人的使用行为提高准确性。
在js程序设计语言中数据类型可以分为两类:原始类型和对象类型。原始类型中包括数字、字符、布尔、null、undefined,其中null和undefined的取值范围就一个,那就是null和undefined这两个关键字。对象类型一般情况下就是属性的集合,但会有特殊的对象,比如说数组array和函数function。要使用这些类型就必须按照语法的要求用特定的记号把这些类型值表示出来,这种本身就表示或者返回某个类型值的写法就叫表达式,表达式也是一种计算。在javascript中,一共有6中最基本的表达式,它们分别是:
- 原始表达式 这种表达式一般就是直接量或者变量等的表示
- 对象和数组初始化表达式 这也可以说是对象直接量和数组直接量,例如 {x:1,y:4} [1,2,3]
- 函数定义表达式 同样的这是算是函数直接量,语法就是function(参数){代码段}
- 属性访问表达式 属性访问有两种写法一是点.加标识符的写法 例如 obj.identifier;二是中括号[]加里面的表达式写法,例如arr[1];j第一种只适用于对象,第二种适用于数组和对象。
- 调用表达式 这是一种特殊的表达式,只适用于函数或者方法,用来执行一块代码段并返回一个值。函数和方法本质上都是对象,只不过这个对象有一段附属的相关联的可执行代码块,并且这段代码块可以用对象加()运算符来执行。
- 对象创建表达式 这是通过构造函数创建对象的一种方法,这个表达式返回一个对象。
以上6中表达式可以通过和运算符结合形成更复杂的表达式,运算符可以操作一个或者多个表达式,并可以产生或者不产生副作用来返回一个值。在js中有50个左右的运算符,运算符一般是符号像+、-,但有些也是关键字,像instanceof、typeof等,这些运算符可以用于算数表达式、比较表达式、逻辑表达式、赋值表达式等。表达式总会产生一个返回值,而没有返回值只产生副作用的写法就是语句了。js中比较常见的语句也是有7种的,它们分别是:
- 表达式语句 这是一种特殊的语句,特殊在它是表达式的,它有个返回值,但它要是以分号结尾的。
- 复杂语句 这种语句写法就是用一个大括号{}把多个语句括起来
- 空语句 空语句就是什么都没有只有个一分号。
- 声明语句 这是用来声明变量或者函数的
- 条件语句 存在决策点或者分支会用到
- 循环语句 代码存在回路的时候可以用到 循环语句有多种写法 for、do/while、for/in等
- try/catch/finally 这些语句块都要使用大括号,是js的异常处理机制
最后通过对这些语句的构造就可以写出正确的javascript程序了。