语法
JavaScript的语法大量借鉴了C及其他类C语言(如java)。
大小写区分
要理解的第一个概念就是ECMAScript中的一切(变量、函数名和操作符)都区分大小写,变量名test和变量名Test是两个不同的变量。
标识符
所谓的标识符,就是指变量、函数、属性的名字,或者函数的参数。标识符的组成规则:
第一个字符必须是一个字母、下划线或者一个美元符号($)开头
其他的字符可以是数字、字母、下划线、美元符号。
按照惯例,标识符的第一个单词小写,剩下的单词的首字母要大写,也就是采用驼峰式的命名规则。如var newWord;
注释
单行注释: // 这是单行注释
多行注释: /*这是多行注释*/’
严格模式
es5中引入了严格模式(strict mode)的概念,在严格模式下es3中的一些不确定的行为将得到处理,也会对某些不安全的操作抛出错误。要在整个脚本中使用严格模式,可以在顶部添加如下代码:
'use strict';
他是一个编译指示,用于告诉JavaScript引擎切换到严格模式,这是为了不破坏es3的语法而特意选定的语法。除了在顶部上方添加严格模式,也可以在函数体内添加,例如:
function doSomething() {
'use strict'
// 函数体
}
语句
JavaScript中语句以一个分号(;)结尾,如果省略分号,则由解析器确定语句的结尾。如下:
var a = 10; // 推荐使用
var b = 1 // 有效语句,但不推荐使用
虽然语句的结尾的分号不是必须的,但是建议不要省略它,因为加上这个分号可以避免很多错误,比如代码结尾处没有分号到处压缩错误,加上分号也会在某些情况下增加代码的性能,因为这样解析器就不用花时间去推测要在哪里添加分号。
变量
JavaScript中的变量是松散型的,所谓的松散型就是可以用来保存任何类型的数据。换句话说每个变量就是一个用于保存值的占位符而已。定义变量需要使用var操作符,后面需要跟变量名,如下所示:
var message;
该段代码定义了一个message的变量,该变量可以用来保存任何值(像这样未经过初始化的变量会保存一个特殊的值 — undefined),所以可以在声明变量的时候给变量赋值,如下所示:
var message = 'hi';
变量message中保存了一个字符串值为’hi’,像这样的初始化变量并不会把它标记为字符串类型,初始化的过程就是给变量赋值这么简单,因此,可以在修改变量值的时候也可以修改变量值的类型,如下所示:
var message = 'hi';
message = 10; // 有效,但不推荐
在这个例子中,首先定义了一个变量message并且赋值为’hi’,然后又被一个数字值为10取代,从字符串类型变成了数字类型,但是不建议修改保存值的类型
需要注意一点的是,使用var声明的变量将成为定义该变量的作用域中的局部变量,也就是说,如果在函数体内使用var定义一个变量,那么这个变量将在函数退出后被销毁,例如:
function doSomething() {
var message = 'hi'; // 局部变量
}
doSomething(); // 调用函数
alert(message); // undefined;
当doSomething函数被调用时,就会创建message变量并且赋值,当函数调用完成之后,该变量message将会被立即销毁。不过可以像下面这样省略var操作符从而创建一个全局变量。如下所示:
function doSomething() {
message = 'hi'; // 全局变量
}
doSomething(); // 调用函数
alert(message); // 'hi'
这个函数中省略了var操作符,因此message就变成了一个全局变量,只要调用过一次doSomething函数,这个message变量就被创建并且赋值了。虽然省略var操作符可以定义全局变量但是这并不推荐。因为这样定义将会变得很难维护,也会导致不必要的混乱(全局污染)。
可以使用一条语句定义多个变量,用逗号分开即可,如下所示:
var message = 'hi', found = false, age = 10;
这个例子定义并初始化了3个变量。
数据类型
JavaScript中有5种简单的数据类型(也称为基本数据类型):Undefined,Null,Boolean,Number和String。还有一种复杂数据类型(也称为引用类型) ---- object。下篇再讲数据类型