JavaScript基本词法
JavaScript语法就是指构成合法的JavaScript程序的所有规则和特征的集合,包括词法和句法。
- 词法: 定义了JavaScript的基本名词规范,包括字符编码、命名规则、标识符、关键字、注释规则、运算符和分隔符等。
- 句法: 定义了JavaScript基本运算逻辑和程序结构,包括短语、句子和代码段的基本规则,如表达式、语句和程序结构等。
一、字符编码
- JavaScript遵循Unicode字符编码规则,Unicode字符集中每个字符使用2个字节来表示,这就意味着用户可以使用中文来命名JavaScript变量。
提示: Unicode是Latin-1字符集的超集,编码数目达到百万级;Latin-1是ASCII字符集的扩展,包含256个拉丁字母;ASCII字符集包含128个基本字符,即常用的英文字母和符号。
<script>
var 名字 = "javaScript基本词法";
var 参数 = "第一个";
function 方法(参数){
document.write("<h1>"+参数+"</h1><p>Hello world"+名字+"</p>");
}
方法(参数)
</script>
-
在JavaScript最初1、2版本中,仅支持ASCII字符编码,Unicode字符只能出现在注释或者引号包含的字符中,考虑到JavaScript版本的兼容性以及开发习惯,不建议使用双字节的中文字符命名变量或函数名。
-
由于JavaScript脚本一般都嵌在网页中,并最终有浏览器来解释,因此在考虑到JavaScript字符编码的同时,还要兼顾HTML文档的字符编码,以及浏览器支持的编码,一般建议保持HTML文档的字符编码和JavaScript字符编码一致,以免出现乱码现象。
二、区分大小写
- JavaScript严格区分大小写。为了避免输入混乱和语法错误,建议采用小写字符编写代码,在一下特殊情况可以使用大写形式:
(1): 构造函数的首字母建议大写。构造函数不同于普通函数,首字母大写,以便与普通函数区分。
示例: 调用预定义的构造函数Date(),创建一个时间对象,然后把时间对象转换为字符串显示出来。
d = new Date(); document.write(d.toString());
(2): 如果表示符由多个单词组成,可以考虑使用驼峰命名法–除首字母外,后面单词的首字母均大写。
示例:
typeOf(); printFirstDemo();
- 大小写使用虽然没有强制,单在工作中还是要遵守基本的行业通用规范。
三、标识符
- 标识符就是名称的专业术语。JavaScript表示符包括变量名、函数名、参数名和属性名。合法的标识符应该注意以下强制规则:
Ⅰ: 首字母必须以字母、下划线(_)或美元符号($)开头。
Ⅱ: 除了第一个字母外,其他位置可以使用Unicode字符。一般建议仅适用ASCII编码的字母,不建议使用双字节的字符。
Ⅲ: 不能与JavaScript的关键字、保留字重名。
Ⅳ: 可以使用Unicode转义序列。如:a可以使用“\u0061”表示
- 标识符虽然可以使用转义序列表示,但使用转义序列不是很方便,一般常用转义序列表示特殊字符或名称,如JavaScript关键字、程序脚本等。
四、直接量
- 直接量就是具体的值,即能够直接参与运算或显示的值,如字符串、数值、布尔值、正则表达式、对象直接量、数组直接量、函数直接量等。
"" // 空字符串直接量
1 // 数值直接量
true // 布尔值直接量
/a/g // 正则表达式直接量
null // 特殊值直接量
{} // 空对象直接量
{} // 空数组直接量
function(){} // 空函数直接量,即函数表达式
五、关键字和保留字
- 关键字就是ECMA-262规定的JavaScript语言内部使用的一组名称(或成为命令)。如下:
break | delete | this | while | if |
---|---|---|---|---|
case | do | in | throw | with |
catch | else | instanceof | try | |
continue | finally | new | typeof | |
debugger | for | return | var | |
default | function | swith | void |
- 保留字就是ECMA-262规定的JavaScript语言内部预备使用的一组名称(或称为命令)。如下:
abstract | double | goto | native | static |
---|---|---|---|---|
boolean | enum | implements | package | super |
byte | export | import | private | synchronized |
char | extends | int | protected | throws |
class | final | interface | public | transient |
const | float | long | short | volatile |
- JavaScript预定义了很多全局变量和函数,用户也应该避免使用,如下:
arguments | encodeURL | Infinity | Number | RegExp |
---|---|---|---|---|
Array | encodeURLComponent | isFinite | Object | String |
Boolean | Error | isNaN | parseFloat | SyntaxError |
Date | eval | JSON | parseInt | TypeError |
decodeURL | EvalError | Math | RangeError | undefined |
decodeURLComponent | Function | NaN | ReferenceError | URLError |
六、分隔符
-
分隔符就是各种不可见的字符的集合,如空格()、水平制表符、垂直制表符、换页符、不中断空白、字节序标记、换行符、回车符、行分隔符、段分隔符等。
-
分隔符使用时需要注意一下几点:
①: 分割符虽然无实际意义,但是在脚本中却不能缺少,如果在标识符与关键字之间不使用分隔符分分隔,JavaScript就会抛出异常。
②: JavaScript解析器一般采用最长行匹配原则,不恰当的换行显示一句代码,容易引发异常或错误。
③: 不能在标识符、关键字内部使用分隔符。
④: 在字符串或者正则表达式内,分隔符是有意义的,不能够随意省略或替换。
七、注释
- 注释就是不被解析的一串字符。JavaScript注释有以下两种方法:
- 单行注释: // 单行注释信息
说明:使用单行注释时,在"//"后面同一行内的任何字符或代码都会被忽视,不在解析。
- 多行注释: /* 多行注释信息 */
说明:在多行注释中,包含在"/“和”/"符号之间的任何字符都是为注释文本而忽略掉。
八、转义序列
-
转义序列就是字符的一种表示方法(映射)。由于各种原因,很多字符无法直接在代码中输入或输出,只能通过转义序列间接表示。
-
Unicode转义序列方法:\u + 4位十六进制数字。
-
Latin-1转义序列方法:\x + 2位十六进制数字。