JavaScript基本词法

2023-07-07 14:50:14 浏览数 (1)


基本词法

JavaScript 语法就是指构成合法的 JavaScript 程序的所有规则和特征的集合,包括词法和句法。简单描述如下: 词法定义了 JavaScript的基本名词规范,包括字符编码、命名规则、标识符、关键字、注释规则、 运算符和分隔符等。 句法定义了 JavaScript的基本运算逻辑和程序结构,包括短语、句子和代码段的基本规则,如表达式、语句和程序结构等。

区分大小写

JavaScript 严格区分大小写。为了避免输入混乱和语法错误,建议采用小写字符编写代码。在以下特殊情况下可以使用大写形式:

构造函数的首字母建议大写。构造函数不同于普通函数。 示例 下面示例调用预定义的构造函数 Date(),创建一个时间对象,然后把时间对象转换为字符串显示出来。

代码语言:javascript复制
d = new Date(); //获取当前日期和时间
document.write(d.toString()); // 显示日期

2) 如果标识符由多个单词组成,可以考虑使用骆驼命名法——除首个单词外,后面单词的首字母大写。例如:

代码语言:javascript复制
typeOf();
printEmployeePaychecks();

提示:

上述都是约定俗成的一般习惯,不构成强制性要求,用户可以根据个人习惯进行命名。

直接量 直接量(Literal)就是具体的值,即能够直接参与运算或显示的值,如字符串、数值、布尔值、正则表达式、对象直接量、数组直接量、函数直接量等。 示例 下面示例分别定义不同类型的直接量:字符串、数值、布尔值、正则表达式、特殊值、对象、数组和函数。

代码语言:javascript复制
//空字符串直接量
1  //数值直接量
true  //布尔值直接量
/a/g  //正则表达式直接量
null  //特殊值直接量
{}  //空对象直接量
[]  //空数组直接量
function(){}  //空函数直接量,也就是函数表达式

转义序列

转义序列就是字符的一种表示方式(映射)。由于各种原因,很多字符无法直接在代码中输入或输出,只能通过转义序列间接表示。

代码语言:javascript复制
Unicode 转义序列方法:u   4位十六进制数字。
Latin-1 转义序列方法:x   2位十六进制数字。

示例

对于字符“©” , Unicode 转义为 u00A9,ASCII 转义为 xA9

代码语言:javascript复制
document.write("xa9");  //显示字符©
document.write("u00a9");  //显示字符©

JavaScript标识符、关键字和保留字

标识符

标识符(Identifier)就是名称的专业术语。JavaScript 标识符包括变量名、函数名、参数名和属性名。

合法的标识符应该注意以下强制规则: 第一个字符必须是字母、下划线(_)或美元符号($)。 除了第一个字符外,其他位置可以使用 Unicode 字符。一般建议仅使用 ASCII 编码的字母,不建议使用双字节的字符。 不能与 JavaScript 关键字、保留字重名。 可以使用 Unicode 转义序列。例如,字符 a 可以使用“u0061”表示。 示例 在下面示例中,定义变量 a,使用 Unicode 转义序列表示变量名。

代码语言:javascript复制
var u0061 = "字符 a 的 Unicode 转义序列是 \0061";
document.write(u0061);

使用转义序列不是很方便,一般常用转义序列表示特殊字符或名称,如 JavaScript 关键字、程序脚本等。

关键字

关键字就是 ECMA-262 规定的 JavaScript 语言内部使用的一组名称(或称为命令)。这些名称具有特定的用途,用户不能自定义同名的标识符。具体说明如表所示。

break

delete

if

this

while

case

do

in

throw

with

catch

else

instanceof

try

continue

finally

new

typeof

debugger(ECMAScript 5 新增)

for

return

var

default

function

switch

void

保留字

保留字就是 ECMA-262 规定的 JavaScript 语言内部预备使用的一组名称(或称为命令)。这些名称目前还没有具体的用途,是为 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

ECMAScript 3 将 Java 所有关键字都列为保留字,而 ECMAScript 5 规定较为灵活。

例如,在非严格模式下,仅规定 class、const、enums、export、extends、import、super 为保留字,其他 ECMAScript 3 保留字可以自由使用;在严格模式下,ECMAScript 5 变得更加谨慎,严格限制 implements、interface、let、package、private、protected、public、static、yield、eval(非保留字)、arguments(非保留字)的使用。

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 运行环境都会预定义一些全局变量和函数,上表列出的仅针对 Web 浏览器运行环境。 无论是在严格模式下还是在非严格模式下,都不要在定义变量名、函数名或者属性名时使用上面列举出的保留字,以免同学们入坑。

JavaScript空白符(分隔符)

分隔符(空白符)就是各种不可见字符的集合,如空格(u0020)、水平制表符(u0009)、垂直制表符(u000B)、换页符(u000C)、不中断空白(u00A0)、字节序标记(uFEFF)、换行符(u000A)、 回车符(u000D)、行分隔符(u2028)、段分隔符(u2029)等。

在 JavaScript 中,分隔符不被解析,主要用来分隔各种记号,如标识符关键字直接量等信息。 在 JavaScript 脚本中,常用分隔符来格式化代码,以方便阅读。 示例1 对于下面一行代码:

代码语言:javascript复制
function toStr(a){return a.toString();}

可以使用分隔符格式化显示:

代码语言:javascript复制
function toStr(a){
  return a.toString();
}

一般 JavaScript 编辑器都会提供代码格式化的功能。

分隔符使用时需要注意以下几点:

  1. 分隔符虽然无实际意义,但是在脚本中却不能缺少。如果在标识符与关键字之间不使用分隔符分隔,JavaScript 就会抛出异常。

示例2 在下面代码中,把关键字 function 与标识符 toStr 连在一起,以及把关键字 return 与 toString 标识符连在一起都是错误的。

代码语言:javascript复制
functiontoStr(a){returna.toString();}  //错误写法
function toStr(a){return a.toString();}  //正确写法
  1. JavaScript 解析器一般采用最长行匹配原则,不恰当地换行显示一句代码,容易引发异常或错误。

示例3 下面代码会返回意外的结果。

代码语言:javascript复制
function toStr(a){
    return 
    a.toString();  //错误的换行
}
document.write(toStr("abc"));  //实际返回 undefined,应该返回"abc"

这是因为 return 作为一条独立语句,JavaScript 解析器可以正确解析它,虽然它后面没有分号,解析器在正确解析的前提下会自动为其补加一个分号,以表示该句已经结束。这样换行显示的 a.toString();就是下一句待执行的命令,而不是被返回的值。

不能在标识符、关键字等内部使用分隔符。 示例4 在下面函数中使用空格把 toString() 分为两部分,JavaScript 会因无法识别而抛出异常。

代码语言:javascript复制
function toStr(a){
return a.to String(); //错误分隔符
}

4) 在字符串或者正则表达式内,分隔符是有意义的,不能够随意省略或替换。 **示例5** 在下面代码中,变量 `a `和` b` 被赋予相同的字符串,但是变量` b` 中插入了空格,则比较结果是不相等的。

代码语言:javascript复制
var a = "空格";
var b = "空格 ";
document.write((a==b));  //返回 false,说明不相同

0 人点赞