第3章 基本概念(1)语法 关键字和保留字 变量

来源:互联网 发布:手机怎么申请淘宝开店 编辑:程序博客网 时间:2024/05/21 23:31

3.1 语法

3.1.1 区分大小写

ECMAScript 中的一切(变量、函数名和操作符)都区分大小写。这也就意味着,变量名test 和变量名Test 分别表示两个不同的变

量,而函数名不能使用typeof,因为它是一个关键字,但typeOf 则完全可以是一个有效的函数名。

3.1.2 标识符

所谓标识符,就是指变量、函数、属性的名字,或者函数的参数。

标识符可以是按照下列格式规则组合起来的一或多个字符:

  • 第一个字符必须是一个字母、下划线(_)或一个美元符号($);
  • 其他字符可以是字母、下划线、美元符号或数字。

按照惯例,ECMAScript 标识符采用驼峰大小写格式,也就是第一个字母小写,剩下的每个单词的首字母大写,例如:

firstSecond  myCar  doSomethingImportant

PS:不能把关键字、保留字、true、false 和null 用作标识符。

3.1.3 注释

ECMAScript 使用C 风格的注释,包括单行注释和块级注释。单行注释以两个斜杠开头,如下所示:

// 单行注释

块级注释以一个斜杠和一个星号(/*)开头,以一个星号和一个斜杠(*/)结尾,如下所示:

/*
* 这是一个多行
* (块级)注释
*/

虽然上面注释中的第二和第三行都以一个星号开头,但这不是必需的。之所以添加那两个星号,

纯粹是为了提高注释的可读性(这种格式在企业级应用中用得比较多)。

3.1.4 严格模式

ECMAScript 5 引入了严格模式(strict mode)的概念。严格模式是为JavaScript 定义了一种不同的解析与执行模型。

在严格模式下,ECMAScript 3 中的一些不确定的行为将得到处理,而且对某些不安全的操作也会抛出错误。

要在整个脚本中启用严格模式,可以在顶部添加如下代码:

"use strict";

这行代码看起来像是字符串,而且也没有赋值给任何变量,但其实它是一个编译指示(pragma),

用于告诉支持的JavaScript 引擎切换到严格模式。这是为不破坏ECMAScript 3 语法而特意选定的语法。

在函数内部的上方包含这条编译指示,也可以指定函数在严格模式下执行:

function doSomething(){    "use strict";    //函数体}
严格模式下,JavaScript 的执行结果会有很大不同

3.1.5 语句

ECMAScript 中的语句以一个分号结尾;如果省略分号,则由解析器确定语句的结尾,如下例所示:

var sum = a + b   // 即使没有分号也是有效的语句——不推荐

var diff = a - b;     // 有效的语句——推荐

虽然语句结尾的分号不是必需的,但我们建议任何时候都不要省略它。

可以使用C 风格的语法把多条语句组合到一个代码块中:


3.2 关键字和保留字

ECMA-262 描述了一组具有特定用途的关键字,这些关键字可用于表示控制语句的开始或结束,或者用于执行特定操作等。

按照规则,关键字也是语言保留的,不能用作标识符。以下就是ECMAScript的全部关键字(带*号上标的是第5 版新增的关键字):


ECMA-262 还描述了另外一组不能用作标识符的保留字。尽管保留字在这门语言中还没有任何特定的用途,但它们有可能在将来被

用作关键字。以下是ECMA-262 第3 版定义的全部保留字:



一般来说,最好都不要使用关键字和保留字作为标识符和属性名,以便与将来的ECMAScript 版本兼容。

3.3 变量

ECMAScript 的变量是松散类型的,所谓松散类型就是可以用来保存任何类型的数据。

定义变量时要使用var 操作符(注意var 是一个关键字),后跟变量名(即一个标识符),

如下所示:var message;

这行代码定义了一个名为message 的变量,该变量可以用来保存任何值(像这样未经过初始化的

变量,会保存一个特殊的值——undefined,相关内容将在3.4 节讨论)。

------------------------------------------------------------------------------------------------------------------------------

ECMAScript 也支持直接初始化变量,因此在定义变量的同时就可以设置变量的值,

如下所示:var message = "hi";

在此,变量message 中保存了一个字符串值"hi"。像这样初始化变量并不会把它标记为字符串类型;

初始化的过程就是给变量赋一个值那么简单。因此,可以在修改变量值的同时修改值的类型,如下所示:

var message = "hi";

message = 100; // 有效,但不推荐

在这个例子中,变量message 一开始保存了一个字符串值"hi",然后该值又被一个数字值100 取

代。虽然我们不建议修改变量所保存值的类型,但这种操作在ECMAScript 中完全有效。

-------------------------------------------------------------------------------------------------------------------------------------

有一点必须注意,即用var操作符定义的变量将成为定义该变量的作用域中的局部变量。

也就是说,如果在函数中使用var 定义一个变量,那么这个变量在函数退出后就会被销毁,例如:

function test(){

    var message = "hi"; // 局部变量

}

test();

alert(message); // 错误!

这里,变量message 是在函数中使用var 定义的。当函数被调用时,就会创建该变量并为其赋值。

而在此之后,这个变量又会立即被销毁,因此例子中的下一行代码就会导致错误。

不过,可以像下面这样省略var 操作符,从而创建一个全局变量:

function test(){

    message = "hi"; // 全局变量

}

test();

alert(message); // "hi"

这个例子省略了var 操作符,因而message 就成了全局变量。这样,只要调用过一次test()函数,

这个变量就有了定义,就可以在函数外部的任何地方被访问到。

PS:虽然省略var 操作符可以定义全局变量,但这也不是我们推荐的做法。因为在局部作用域中定义的全局变量很难维护,

而且如果有意地忽略了var 操作符,也会由于相应变量不会马上就有定义而导致不必要的混乱。

--------------------------------------------------------------------------------------------------------------------------------------

可以使用一条语句定义多个变量,只要像下面这样把每个变量(初始化或不初始化均可)用逗号分隔开即可:

var message = "hi",    found = false,    age = 29;

这个例子定义并初始化了3 个变量。同样由于ECMAScript 是松散类型的,因而使用不同类型初始化变量的操作

可以放在一条语句中来完成。虽然代码里的换行和变量缩进不是必需的,但这样做可以提高可读性。


0 0
原创粉丝点击