购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.5 语言基本要素

1.5.1 标识符和关键字

与其他编程语言中的概念基本一样,JavaScript中的标识符就是一个名字。在JavaScript中,标识符一般用来对变量和函数进行命名,或者用作JavaScript代码中某些循环语句中的跳转位置的标记。

JavaScript标识符必须以字母、下划线“_”或美元符“$”开始,后续的字符可以是字母、数字、下划线或美元符号,不能包含空格。

注意

JavaScr ipt的标识符对大小写敏感。

JavaScript已将一些特殊的标识符用来作为语言的关键字,所以在程序中不能再把它们用作标识符。JavaScript的关键字如下:

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

说明

除了关键字外,JavaScr ipt还保留了一些标识符,一般也不能在程序中用作标示符。JavaScr ipt的保留字如下:

class,const,enum,export,extends,import,super,imp lements,let,pr ivate,publ ic,yield,interface,package,protected,static,arguments,eval,abstract,double,goto,native,static,boolean,enum,imp lements,package,super,byte,export,import,pr ivate,synchronized,char,extends,int,protected,throws,class,final,interface,publ ic,transient,const,float,long,short,volati le。

此外,JavaScr ipt预定义了很多全局变量和函数,应当避免把它们的名字用作变量名和函数名。这些全局变量和函数定义如下:

arguments,encodeURI,I nfinity,Number,RegExp,Array,encodeURIComponent,isFinite,Object,Str ing,Boolean,Error,isNaN,parseFloat,SyntaxError,Date,eval,JSON,parse I nt,TypeError,decodeURI,EvalError,RangeError,undefined,decodeURIComponent,Math,Function,NaN,ReferenceError,URIError。

1.5.2 数据类型

JavaScript的数据类型分为两类:原始类型(primitive type)和对象类型(object type)。

JavaScript的原始类型(primitive type)共有 5 种:Boolean、Number、String、Undefined、Null。

1. Boolean

布尔类型或称为逻辑类型,表示真或假两种状态。只有两种字面量:true和false。

2. Number

数值类型,表示 32 位整数或 64 位浮点数。

整数可使用 3 种进制表示,除十进制之外,还可以使用八进制或十六进制。如果数字以0 作为前缀,则说明它是八进制数,如果数字以 0x作为前缀,则说明它是十六进制数。如下代码说明这一点:

浮点数必须包含小数点和小数点后的至少一位数字。对于非常大或非常小的浮点数,可以使用科学计数法表示。

此外,Number类型包含了几个特殊的值,作为Number类型的静态属性,见表1.1。

表1.1 特殊的Number类型的值

3. String

表示Unicode字符的序列。它是唯一没有固定大小的原始类型。可以用字符串存储0个或更多的Unicode字符,字符在内存中由 16 位整数表示。

字符串中每个字符都有特定的位置,首字符从位置 0 开始,第二个字符在位置1,依次类推。这意味着字符串中的最后一个字符的位置一定是字符串的长度减1,如图1.7所示。

图1.7 字符串的字符序列

字符串字面量是由双引号(")或单引号(')声明的,由于ECMAScript没有字符类型,所以可使用这两种表示法中的任何一种。例如,下面的两行代码都有效:

String类型还包括几种特殊字符字面量,JavaScript的特殊字符的字面量见表1.2。

表1.2 特殊字符的字面量

4. Undefined

表示未初始化的变量的类型。这种类型只有一个值:undefined。请看如下代码:

变量oTemp未初始化,它的类型为Undefined,被赋予Undefined类型的唯一的值undefined。

5. Null

表示不存在的对象的类型。这种类型只有一个值:null。一般在要表示的对象不存在时,用null表示。值undefined实际上是从null派生而来,所以JavaScript将二者定义为相等的。如下代码说明这一点:

6.对象类型

JavaScript中除了数字、字符串、布尔值、null和undefined之外的就是对象了。

对象(object)是特性(attribute)的集合,每个特性都由“名/值对”(值可以是原始值,比如数字、字符串,也可以是对象)构成。

在其他面向对象的语言中,对象类型一般叫作类。但JavaScript并不真正具有类,而ECMAScript标准中根本没有“类”一词。JavaScript中的对象类型实际上是指各种作为对象处理的数据结构。ECMAScript中有大量的预定义的对象类型,即所谓本地对象,而浏览器和网页也会向JavaScript提供各种对象以实现脚本与浏览器及网页的访问,另外,我们还可以在JavaScript中创建自定义的对象。

关于对象类型的创建和对象的使用,在后续章节中将陆续学习。

1.5.3 变量

1.声明变量

JavaScript中的变量是用var运算符(variable的缩写)加变量名定义的。例如:

在这个例子中,声明了变量test,并把它的值初始化为"hi"(字符串)。由于JavaScript是弱类型的,所以解释程序会为test自动创建一个字符串值,无须明确的类型声明(稍后将详细介绍“弱类型”)。

还可以用一个var语句定义两个或多个变量,例如:

前面的代码定义了变量test1,初始值为"hi",还定义了变量test2,初始值为"hello"。

不过用同一个var语句定义的变量不必具有相同的类型,如下所示:

这个例子除了(再次)定义test外,还定义了age,并把它初始化为25。即使test和age属于两种不同的数据类型,在JavaScript中这样定义也是完全合法的。

与C#和Java不同,JavaScript中的变量并不一定要初始化(它们是自动初始化的,将在后面讨论这一点)。因此,下面这一行代码也是有效的:

此时,变量test的值是undefined。

2.弱类型

与C#和Java明显不同的是:特定的某个变量可以存放不同类型的值,也就是说JavaScript的变量是弱类型的。在声明一个变量时根本不明确它的数据类型,需要在为它初始化后才知道它的类型,而且随时可以给它赋予不同类型的值,这样,它的数据类型实际上就可以随时变化。这是弱类型变量的优势。例如,可以把变量初始化为字符串类型的值,之后把它设置为数字值,如下所示:

这段代码将正确地输出字符串值和数字值。但是,如前所述,使用变量时,好的编码习惯是始终存放相同类型的值。

使用typeof运算符可以获知一个变量或值的在当前时刻的数据类型。请看以下代码:

注意

对于Nul l类型的值即nul l,使用typeof运算符将返回object。使用typeof运算符操作对象类型的变量或值时,也将得到object。

3.变量声明不是必需的

与大多数程序设计语言的重大区别是:JavaScript在使用变量之前不必声明。例如:

在上面的代码中,首先,sTest被声明为字符串类型的值“hello”。接下来的一行,用变量sTest2 把sTest与字符串“world”连在一起。变量sTest2 并没有用var运算符定义,这里只是插入了它,就像已经声明过它一样。

JavaScript的解释程序遇到未声明过的标识符时,将用该变量名创建一个全局变量,并将其初始化为指定的值。这是该语言的便利之处。

注意

这是一个不好的习惯并容易造成很多bug,因此,你应当始终使用var来声明变量。

1.5.4 注释

JavaScript支持两种格式的注释。在行尾“//”之后的文本都会被JavaScript当作注释忽略掉。此外,“/*”和“*/”之间的文本也会当作注释,这种注释可以跨行书写,但不能有嵌套的注释。下面都是合法的JavaScript注释:

1.单行注释
2.多行注释

o2uK4bH7DbQS5gbT7M51zV/MECCaKtSoIrKtuShu4lgrmDeEki8RFJZa0lX0PRuM

点击中间区域
呼出菜单
上一章
目录
下一章
×