21天(js高程)-第3天
第3章 基本概念
ECMA-262 通过叫做 ECMAScript 的“伪语言”为我们描述了 JavaScript 的所有这些基本概念。
3.1 语法
ECMAScript 的语法大量借鉴了 C 及其他类 C 语言(如 Java 和 Perl)的语法。
3.1.1区分大小写
ECMAScript 中的一切(变量、函数名和操作符)都区分大小写。
3.1.2 标识符
所谓标识符,就是指变量,函数,属性的名字,或者函数的参数。
第一个字符必须是一个字母、下划线(_)或一个美元符号($);
其他字符可以是字母、下划线、美元符号或数字。
按照惯例, ECMAScript 标识符采用驼峰大小写格式,也就是第一个字母小写,剩下的每个单词的首字母大写,例子:doSomethingImportant
不能把关键字、保留字、true、false和null用作标识符。
3.1.3注释
单行注释://
块级注释/*
*这是一个多行
*(块级)注释
*/
3.1.4 严格模式
ECMAScript 5 引入了严格模式(strict mode)的概念。严格模式是为JavaScript定义了一种不同的解析与执行模型。在严格模式下, ECMAScript 3 中的一些不确定的行为将得到处理,而且对某些不安全的操作也会抛出错误。
要在整个脚本中启用严格模式,可以在顶部添加如下代码:
" use strict";
用于告诉支持的JavaScript引擎切换到严格模式。这是为不破坏ECMAScript 3 语法而特意选定的语法。
在函数内部的上方包含这条编译指示,也可以指定函数在严格模式下执行:
function doSomething(){
"use strict";
//函数体
}
严格模式下, JavaScript 的执行结果会有很大不同,支持严格模式的浏览器包括 IE10+、 Firefox 4+、 Safari 5.1+、 Opera 12+和 Chrome。
3.1.5 语法
ECMAScript 中的语句以一个分号结尾;如果省略分号,则由解析器确定语句的结尾。虽然语句结尾的分号不是必需的,但我们建议任何时候都不要省略它。
可以使用 C 风格的语法把多条语句组合到一个代码块中,即代码块以左花括号({)开头,以右花括号(})结尾:
if (test){
test = false;
alert(test);
}
虽然条件控制语句(如if语句)只在执行多条语句的情况下才要求使用代码块,但最佳实践是始终在控制语句中使用代码块——即使代码块中只有一条语句,例如:
if (test)
alert(test); //有效但容易出错,不要使用
if (test){ //推荐使用
alert(test);
}
在控制语句中使用代码块可以让编码意图更加清晰,而且也能降低修改代码时出错的几率。
3.2 关键字和保留字
ECMA-262 描述了一组具有特定用途的关键字,这些关键字可用于表示控制语句的开始或结束,或者用于执行特定操作等。按照规则,关键字也是语言保留的,不能用作标识符。以下就是 ECMAScript的全部关键字(带*号上标的是第 5 版新增的关键字):
break; do; instanceof; typeof; case; else; new; var; catch; finally; return; void; contitue;
for; switch; while; debugger*; function; this; with; delete; in; try
ECMA-262 还描述了另外一组不能用作标识符的保留字。尽管保留字在这门语言中还没有任何特定的用途,但它们有可能在将来被用作关键字。以下是 ECMA-262 第 3 版定义的全部保留字:
abstract ; enum; int; short; boolean; export; interface; static; byte; extends; long; super; char; final; native; synchronized; class; float; package; throws; const; goto;
private; transient; debugger; implements; protected; volatile; double; import; public;
第 5 版把在非严格模式下运行时的保留字缩减为下列这些:
class; enum; extends; super; const; export; import;
在严格模式下,第 5 版还对以下保留字施加了限制:
implements; package; public; interface; private; static; let; protected; yield;
注意, let 和 yield 是第 5 版新增的保留字;其他保留字都是第 3 版定义的。为了最大程度地保证兼容性,建议读者将第 3 版定义的保留字外加 let 和 yield 作为编程时的参考。
在实现 ECMAScript 3 的 JavaScript 引擎中使用关键字作标识符,会导致“ Identifier Expected”错误。而使用保留字作标识符可能会也可能不会导致相同的错误,具体取决于特定的引擎。
第 5 版对使用关键字和保留字的规则进行了少许修改。关键字和保留字虽然仍然不能作为标识符使用,但现在可以用作对象的属性名。一般来说,最好都不要使用关键字和保留字作为标识符和属性名,以便与将来的 ECMAScript 版本兼容。
除了上面列出的保留字和关键字, ECMA-262 第 5 版对eval和arguments还施加了限制。在严格模式下,这两个名字也不能作为标识符或属性名,否则会抛出错误。
3.3 变量
ECMAScript的变量是松散类型的,所谓松散类型就是可以用来保存任何类型的数据。换句话说每个变量仅仅是一个用于保存值的占位符而已。定义变量时要使用var 操作符(var 是一个关键字),后跟变量名(即一个标识符)。
如:var message; 这行代码定义了一个名为 message 的变量,该变量可以用来保存任何值(像这样未经过初始化的变量,会保存一个特殊的值--undefined)
初始化的过程就是给变量赋一个值那么简单。因此,可以在修改变量值的同时修改值的类型。