javascript快速入门7—ECMAScript语法基础

ECMAScript的基础概念

熟悉Java、C和Perl这些语言的开发者会发现ECMAScript的语法很容易掌握,因为它借用了这些语言的语法。Java和ECMAScript有一些关键语法特性相同,也有一些完全不同。ECMAScript的基础概念如下:

  • 区分大小写。与Java一样,变量、函数名、运算符以及其他一切东西都是区分大小写的,也就是说,变量test不同于变量Test。
  • 变量是弱类型的。与Java和C不同,ECMAScript中的变量无特定的类型,定义变量时只用var运算符,可以将它初始化为任意的值。这样可以随时改变变量所存数据的类型(尽管应该避免这样做,但作为Web开发,这确实可以提高效率)。
  • 每行结尾的分号可有可无。Java、C和Perl都要求每行代码以分号(;)结束才符合语法。ECMAScript则允许开发者自行决定是否以分号结束一行代码。如果没有分号,ECMAScript就把这行代码的结尾看作该语句的结尾(与Visual Basic和VBScript相似),前提是这样没有破坏代码的语义。最好的代码编写习惯是总加入分号,因为没有分号,有些浏览器就不能正确运行!
  • 注释与Java、C和PHP语言的注释相同。ECMAScript借用了这些语言的注释语法。有两种类型的注释——单行注释和多行注释。单行注释以双斜线(//)开头。多行注释以单斜线和星号(/)开头,以星号加单斜线结尾(/)。
  • 括号表明代码块。从Java中借鉴的另一个概念是代码块。代码块表示一系列应该按顺序执行的语句,这些语句被封装在左括号({)和右括号(})之间。
    一些示例如下:
  1. var txt = "some string";
  2. TXT = "other string";//TXT无须声明,可以直接赋值
  3. alert(txt==TXT);//false
  4. var str = "string" //分号可有可无
  5. var hob = "No";var bob = "Yes";//使用分号,可以在一行上写多行语句
  6. /* 多行注释
  7. alert("注释中的代码不会被执行") */
  8. if (txt=="some string") {//代码块
  9. alert(true);
  10. }

变量

如前所述,ECMAScript中的变量是用var运算符(variable的缩写)加变量名定义的,例如:

  1. var test = "Hello!World!";

在这个例子中,声明了变量test,并把它的值初始化为"Hello!World!"(字符串)。由于ECMAScript是弱类型的,所以解释程序会为test自动创建一个字符串值,无需明确的类型声明。还可以用一个var语句定义两个或多个变量:

  1. var a = "some",b="string"

前面的代码定义了变量test,初始值为"some",还定义了变量test2,初始值为"string"。不过用同一个var语句定义的变量不必具有相同的类型,如下所示:

  1. var a=12,b="string";

即使a和b属于两种不同的数据类型,在ECMAScript中这样定义也是完全合法的。与Java不同,ECMAScript中的变量并不一定要初始化(它们是在幕后初始化的,将在后面讨论这一点)。因此,下面一行代码也是有效的:

  1. var a; //只声明

此外,与Java不同的还有变量可以存放不同类型的值。这是弱类型变量的优势。例如,可以把变量初始化为字符串类型的值,之后把它设置为数字值,如下所示:

  1. var test = "string";
  2. alert(test); //.....若干代码后
  3. test=123;//更改了类型
  4. alert(test);

这段代码将毫无问题地输出字符串值和数字值。但是,如前所述,使用变量时,好的编码习惯是始终存放相同类型的值。变量名需要遵守两条简单的规则:

  • 第一个字符必须是字母、下划线(_)或美圆符号($)
  • 余下的字符可以是下划线、美圆符号或任何字母或数字字符。
    下面的变量名都是合法的:
  1. var a; var $a; var $; var _a; var _; var a23;

当然,只是因为变量名的语法正确并不意味着就该使用它们。变量还应遵守一条著名的命名规则:

  • Camel标记法——首字母是小写的,接下来的单词都以大写字母开头
  • Pascal标记法——首字母是大写的,接下来的单词都以大写字母开头
  • 匈牙利类型标记法——在以Pascal标记法命名的变量前附加一个小写字母(或小写字母序列),说明该变量的类型。例如,i表示整数,s表示字符串
    下面的表列出了用匈牙利类型标记法定义ECMAScript变量使用的前缀:
类型 前缀 示例
数组 a aValues
布尔型 b bFound
浮点型(数字) f fValue
函数 fn fnMethod
整型(数字) i iValue
对象 o oType
正则表达式 re rePattern
字符串 s sValue
变型(可以是任何类型) v vValue

下面是一些命名示例 

  1. var userName="CJ";//驼峰命名方式
  2. var UserName="CJ";//Pascal命名方式
  3. var sUserName="CJ";//匈牙利命名方式

ECMAScript另一个有趣的方面(也是与大多数程序设计语言的主要区别)是在使用变量之前不必声明。例如:

  1. var str ="some";
  2. otherStr += str+" "+"string";
  3. alert(otherStr);

在上面的代码中,变量otherStr并没有用var运算符定义,这里只是插入了它,就像已经声明过它。ECMAScript的解释程序遇到未声明过的标识符时,用该变量名创建一个全局变量,并将其初始化为指定的值。这是该语言的便利之处,不过如果不能紧密跟踪变量,这样做也很危险。最好的习惯是像使用其他程序设计语言一样,总是声明所有变量。

关键字

ECMA-262定义了ECMAScript支持的一套关键字(keyword)。这些关键字标识了ECMAScript语句的开头和/或结尾。根据规定,关键字是保留的,不能用作变量名或函数名。下面是ECMAScript关键字的完整列表:

break else new var
case finally return void
catch for switch while
continue function this with
default if throw
delete in try
do instanceof typeof

如果把关键字用作变量名或函数名,可能得到诸如“Identifier expected”(应该有标识符,缺少标识符)这样的错误消息。

保留字

保留字是对于JavaScript有特殊含义的单词。因此,不能将它们用作变量名或函数名。也就是说,它们可能是JavaScript未来版本中的命令。现在就应该避免使用它们,以免在新版本发布时不得不修改代码。如果将保留字用作变量名或函数名,那么除非将来的浏览器实现了该保留字,否则很可能收不到任何错误消息。当浏览器将其实现后,该单词将被看作关键字,如此将出现关键字错误。

ECMAScript 3为以后保留的单词:

abstract final protected
boolean float public
byte goto short
char implements static
class import super
const int synchronized
debugger interface throws
double long transient
enum native volatile
export package extends
private

ECMAScript 4:ECMAScript4现在还没有什么实现.ECMAScript4中,下面的不再是保留字了,但也应该尽量不要使用它们

  1. boolean final short byte float static char int double long

下面的被加入了保留字

  1. as namespace use false true null is

原文: https://wizardforcel.gitbooks.io/liyanhui-tutorials/content/90.html