首页 02 数据类型、常量与变量

02 数据类型、常量与变量

举报
开通vip

02 数据类型、常量与变量 第 2 章 数据类型、常量与变量 在计算机程序中都是通过值(Value)来进行运算的,能够表示并操作值的类型为数据类型。在 本章中将会介绍JavaScript中的常量(Literal)、变量(Variable)和数据类型(Data Type)。 2.1 基本数据类型 JavaScript中支持数字、字符串和布尔值3种基本数据类型,下面对这3种基本数据类型进行介绍。 2.1.1 字符串型 字符串型是JavaScript中用来表示文本的数据类型,是由Unicode字符、数字和标点符号组成的一 个字符...

02  数据类型、常量与变量
第 2 章 数据类型、常量与变量 在计算机程序中都是通过值(Value)来进行运算的,能够表示并操作值的类型为数据类型。在 本章中将会介绍JavaScript中的常量(Literal)、变量(Variable)和数据类型(Data Type)。 2.1 基本数据类型 JavaScript中支持数字、字符串和布尔值3种基本数据类型,下面对这3种基本数据类型进行介绍。 2.1.1 字符串型 字符串型是JavaScript中用来表示文本的数据类型,是由Unicode字符、数字和标点符号组成的一 个字符串序列。字符串通常都是用单引号或双引号括起来的。如果在字符串中包括着特殊字符,可以 使用转义字符来代替。 注意 在JavaScript中只有字符串数据类型,没有字符(char)数据类型。即使要表示单个字符,使用 的也是字符串型,只不过该字符串型的长度是1。 2.1.2 数字型 数字型也是JavaScript中的基本数据类型。在JavaScript中的数字不区分整型和浮点型,所有的数 字都是以浮点型来表示的。JavaScript中数字的有效范围大约为10-308~10308之间。除了常用的数字之 外,JavaScript中还支持以下两个特殊的数值。 ❑ Infinity:当在JavaScript中使用的数字大于JavaScript所能表示的最大值时,JavaScript就会将 其输出为Infinity,即无限大的意思。当然,如果JavaScript中使用的数字小于JavaScript所能表 示的最小值时,JavaScript也会输出-Infinity。 ❑ NaN:JavaScript中的NaN是“Not a Number”(不是数字)的意思。通常是在进行 数学 数学高考答题卡模板高考数学答题卡模板三年级数学混合运算测试卷数学作业设计案例新人教版八年级上数学教学计划 运算时 产生了未知的结果或错误,JavaScript就会返回NaN,这代表着数学运算的结果是一个非数字 的特殊情况。如用0来除以0,JavaScript就会返回NaN。 注意 NaN是一个很特殊的数字,不会与任何数字相等,包括NaN。在JavaScript中只能使用isNaN()函 数来判断运算结果是不是NaN。 除了Infinity和NaN之外,JavaScript还可以使用Number对象中的某些属性来表示特殊的数值,这 些属性与其所代表的数值如下所示。 ❑ Number.MAX_VALUE:用来表示JavaScript中的最大数值,即1.797 693 134 862 315 7e+308。 ❑ Number.MIN_VALUE:用来表示JavaScript中最小的数字(与0最接近的数字),即5e-324。 ❑ Number.NaN:用来表示特殊的非数字值。 25 励 志 照 亮 人 生   编 程 改 变 命 运 第 2 章 数据类型、常量与变量 ❑ Number.POSITIVE_INFINITY:用来表示正无穷大的数值,即Infinity。 ❑ Number.NEGATIVE_INFINITY:用来表示负无穷大的数值,即-Infinity。 2.1.3 布尔型 布尔型比较简单,只有两个值,即代表真的“true”和代表假的“false”。布尔值通常是通过比较 得来的,如以下代码所示。 x == 2 在上面代码中,如果x等于2,则返回true,如果x不等于2,则返回false。 2.2 复合数据类型 除了基本的数据类型之外,JavaScript还支持复合数据类型,复合数据类型包括对象和数组两种。 2.2.1 对象 对象其实就是一些数据的集合,这些数据可以是字符串型、数字型、布尔型,也可以是复合型。 对象中的数据是已命名的数据,通常作为对象的属性来引用。例如一个超链接(Link)对象有一个名 为text的属性,可以通过以下方法来引用。 link.text JavaScript中的对象除了拥有属性之外,还可以拥有方法。例如一个窗口(Window)对象有一个 名为alert的方法,可以通过以下方法来引用。 window.alert(message) 2.2.2 数组 数组与对象一样,也是一些数据的集合,这些数据也可以是字符串型、数字型、布尔型,或者是 复合型。与对象不同的是,数组中的数据并没有被命名,即数组中的数据没有名称,因此不能通过名 称来引用该数据。在数组中为每个数据都编了一个号,这个号称为数组的下标。在JavaScript中数组 的下标是从0开始,通过使用数组名加下标的方法可以获取数组中的某个数据。如以下代码分别获取 名为abc数组的第1个和第3个数据。 abc[0] abc[1] 2.3 其他数据类型 除了基本数据类型与复合数据类型之外,JavaScript还支持函数、Null与Undefined 3种其他数据 类型。 2.3.1 函数 函数(Funct ion)是一段可执行的JavaScr ip t代码,函数具有一次定义多次使用的特点。在 JavaScript中的函数可以带有0个或多个参数。在函数体中执行完JavaScript代码之后,也可以返回一 26 励 志 照 亮 人 生   编 程 改 变 命 运 零基础学 JavaScript 个或不返回值。在JavaScript中提供了很多预定义的函数,如用于检测非数字值的isNaN()函数、用于 计算平方根的Math.sqrt()函数等。其使用方法如以下代码所示。 var bFlag = isNaN(0/0); var x = Math.sqrt(100); 以上两行代码,第1行返回true,第2行返回10。除了JavaScript中预定义的函数之外,JavaScript 还允许程序员自定义函数,其方法如下所示。 function mysum(x,y) { return x+y; } 在JavaScript中的函数也是一个数据类型,因此,可以像其他类型的数据一样赋值给变量或对象 的属性,如以下代码所示。 var a = mysum(2,13) 2.3.2 null null是一个特殊的数据类型,其所代表的意思为“空”。需要注意,这个“空”并不代表是0或空 字符串。数字0代表的是数字是数字型的数据;空字符串代表的是长度为0的字符串,是字符串类型的 数据。而null代表没有值,不是一个有效的数字、字符串,也不是数组、对象和函数,什么数据类型 都不是。 注意 JavaScript区分大小写,NULL、Null不等同于null。 2.3.3 undefined undefined也是一个特殊的数据类型,只有定义了一个变量,但没有为该变量赋值、使用了一个并 未定义的变量或者是使用了一个不存在的对象的属性时,JavaScript才会返回undefined。 2.4 数据类型的转换 JavaScript支持字符串型、数字型和布尔型等数据类型,当这些数据类型之间需要进行运算时, 就必须将不同的数据类型转换为相同的数据类型。 2.4.1 隐式类型转换 JavaScript是一种无类型(Notype)的语言,这种“无类型”并不是指JavaScript没有数据类型, 而是指JavaScript是一种松散类型、动态类型的语言。因此,在JavaScript中定义一个变量时是不需要 指定变量的数据类型,这就使得JavaScript可以很方便灵活地进行隐式类型转换。 所谓隐式类型转换就是不需要程序员定义,JavaScript会自动将某一个类型的数据转换成另一个 类型的数据。JavaScript隐式类型转换的规则是:将类型转换到环境中应该使用的类型。例如,在布 尔环境中,可以将数字转换成布尔值,如以下代码所示。 if (1) 27 励 志 照 亮 人 生   编 程 改 变 命 运 第 2 章 数据类型、常量与变量 { document.write("ok"); } 在以上代码中,数字1会自动转换成布尔值true。事实上,不但是数字1,只要是不等于0的数字, JavaScript都可以将其转换成布尔值true。同样在字符串环境中,可以将布尔值转换成字符串,如以下 代码所示。 document.write(true); 在以上代码中,由于write()方法输出的是字符串,所以JavaScript会自动将布尔值true转换成字符 串“true”。JavaScript中可以隐式类型转换的情况如下所示。 ❑ 数字类型:在字符串环境下可以隐式转换为“数字”;在布尔环境中可以隐式转换为true(如 果数字为0,则隐式转换为false)。 ❑ 非空字符串:在数字环境下可以隐式转换为字符串中的数字(如字符串“123”可以转换为数字123) 或NaN(如字符串“abc”隐式转换为数字则会返回NaN);在布尔环境下可以隐式转换为true。 ❑ 空字符串:在数字环境下可以隐式转换为0;在布尔环境下可以隐式转换为false。 ❑ 字符串“true”:在数字环境下可以隐式转换为1;在布尔环境下可以隐式转换为true。 ❑ 字符串“false”:在数字环境下可以隐式转换为0;在布尔环境下可以隐式转换为false。 ❑ null:在字符串环境下可以隐式转换为“null”;在数字环境下可以隐式转换为0;在布尔环境 下可以隐式转换为false。 ❑ NaN:在字符串环境下可以隐式转换为“NaN”;在布尔环境下可以隐式转换为false。 ❑ undefined:在字符串环境下可以隐式转换为“undefined”;在数字环境下可以隐式转换为 NaN;在布尔环境下可以隐式转换为false。 ❑ true:在字符串环境下可以隐式转换为“true”;在数字环境下可以隐式转换为1。 ❑ false:在字符串环境下可以隐式转换为“false”;在数字环境下可以隐式转换为0。 2.4.2 显式类型转换 在JavaScript中除了可以隐式转换数据类型之外,还可以显式转换数据类型。显式转换数据类型, 可以增强代码的可读性。显式转换类型的方法有以下两种。 1. 将对象转换成字符串 在JavaScript中很多对象中都有toString()方法可以将对象直接转换成字符串,如以下代码所示。 var arr = ["JavaScript","VBScript","Script"]; document.write(arr.toString()); 以上代码会将数组转换成字符串后输出,输出结果如下所示。 JavaScript,VBScript,Script 除了数组对象之外,还有Date对象、Error对象、Number对象和Function函数等,都可以使用 toString()方法来将对象转换成字符串。 注意 对象不能直接转换成数字型,如果要将对象转换成数字型数据,可以先将其转换成字符型数据, 再将字符型数据转换成数字型数据。 28 励 志 照 亮 人 生   编 程 改 变 命 运 零基础学 JavaScript 2. 基本数据类型转换 在JavaScript中可以使用Number()、Boolean()和String()函数来将数据转换成数字型、布尔型和字 符串型,如以下代码所示。 var s = "1" var i = Number(s) + 2; document.write(i); 以上代码的输出结果为3,在以上代码中,Number(s)的作用是将字符1转换为数字1。Boolean()与 String()函数的使用方法与Number()函数的使用方法类似,在此就不再赘述了。除了使用Number()、 Boolean()和String()函数来显式转换类型之外,还可以使用以下3种基本类型的转换方式。 (1)数字型转换成字符串型,可以将其与一个空字符串相连。以下代码可以将数字型数据转换成 字符串数据。 var s = 123 + ""; var str = "" + 123; (2)字符串型转换成数字型,可以将其减0。以下代码可以将字符串型数据转换成数字型数据。 var s = "123"; var sa = s - 0; (3)字符串型或数字型转换成布尔型,可以将其连续使用两次“!”运算符。以下代码可以将数 据转换成布尔型数据。 var s = "true"; if (!!s) { document.write(s) } var i = 1; if (!!i) { document.write(i) } 2.5 常量 常量(Literals)通常用来表示一个固定的值,这个值是不会被改变的,在JavaScript中常量分为布 尔常量、整数常量、浮点常量、字符串常量和数组常量5种。常量可以直接出现在JavaScript的程序中。 2.5.1 整数常量 在JavaScript中的数字可以分为整数与浮点数两种。当一个整数直接出现在JavaScript程序中时, 这个整数就是整数常量。在JavaScript中整数常量又可以分为以下3种。 (1)十进制整数:十进制整数就是一个由0~9组成的数字序列,并且该序列的第一个数字不能是 0(单独一个0除外)。以下代码都是十进制的整数常量。 0 123 9783649 29 励 志 照 亮 人 生   编 程 改 变 命 运 第 2 章 数据类型、常量与变量 (2)八进制整数:八进制整数的第一个数字是0,其后跟着一个由0~7组成的数字序列。以下代 码都是八进制的整数常量。 0345 0127 07 (3)十六进制整数:十六进制整数是以“0x”或“0X”开头,其后跟着十六进制的数字序列。十 六进制的数字序列由数字0~9和英语a~f(A~F)组成。以下代码都是十六进制的整数常量: 0x123 0X134 0x12ff 0xff 整数常量通常直接出现在JavaScript的计算上,如以下代码所示。 a = a + 123 b = 4 * 7 注意 只要是常量,通常都是直接出现在JavaScript程序中的。 2.5.2 浮点常量 浮点常量可以包含小数点,其表示方法有以下两种。 (1)传统记数法:传统记数法是将一个浮点数分为3个部分,即整数部分、小数点和小数部分。 如果整数部分为0,可以省略整数部分。以下代码中的浮点数表示法为传统记数法。 1.2 23344.283 .22323 (2)科学记数法:当一个数字很大或很小时,可以使用科学记数法来表示。科学记数法将一个数 字分为3部分,第1部分与传统记数法一样,是一个带小数的浮点数;第2部分是e或E;第3部分是一个 带正号或负号的整数,其中正号可以省略。以下代码中浮点数是以科学记数法来表示的。 1.2e3 1E4 3.5e-2 6.112E-3 在科学记数法中,e(或E)后面的整数代表10的指数次幂,再将该指数次幂乘以e(或E)前面的 浮点数得到的就是科学记数法所代表的数值,如以下例子。 1.2e3 = 1.2 × 103 = 1200 1E4 = 1 × 104 = 10000 3.5e-2 = 3.5 × 10-2 = 0.035 6.112E-3 = 6.112 × 10-3 = 0.006112 2.5.3 字符串常量 字符串是由单引号(')或双引号(")括起来的字符序列。其中字符序列的个数可以是0个或多 个。单引号所括起来的字符序列里可以包括双引号,而双引号所括起来的字符序列里也可以包含单引 30 励 志 照 亮 人 生   编 程 改 变 命 运 零基础学 JavaScript 号。字符串常量必须写在一行中,如果换行的话,JavaScript会认为是两个语句而产生的错误。以下 代码都是字符串常量。 "JavaScript" 'JavaScript' "JavaScript's language" 'aa"bb' 2.5.4 字符串中的转义字符 上一节中提到字符串常量必须使用单引号或双引号括起来,如果一个字符串本身包含了单引号或 双引号,那应该怎么办呢?假设一个字符串如下所示。 JavaScript中可以包含单引号(')或双引号(") 如果一个字符串常量中的内容如上所示,那么在JavaScript中要怎么表示呢?是用单引号将其括 起来,还是用双引号将其括起来?代码如下所示,无论是使用单引号,还是使用双引号,在 JavaScript中都会产生混淆,因为JavaScript无法分辨哪个引号是属于字符串,哪个引号是属于标识字 符串常量的引号。 'JavaScript中可以包含单引号(')或双引号(")' "JavaScript中可以包含单引号(')或双引号(")" 对于这种情况,就必须使用转义字符。使用转义字符可以在字符串里加入一些特殊字符,如上面 所说的单引号和双引号等。转义字符是以反斜杠(\)开始,例如,单引号可以使用“\'”来代替,双 引号可以使用“\"”来代替。当浏览器解析JavaScript代码时,遇到转义字符“\'”和“\"”就会知道 这是字符串中的一个字符,而不是标记字符结束的字符。因此,上面代码中的字符串常量可以写成如 下代码所示。 'JavaScript中可以包含单引号(\')或双引号(")' "JavaScript中可以包含单引号(')或双引号(\")" 'JavaScript中可以包含单引号(\')或双引号(\")' "JavaScript中可以包含单引号(\')或双引号(\")" 在JavaScript中常用到的转义字符如表2.1所示。 表2.1 JavaScript中的转义字符 转 义 字 符 所代表的字符 转 义 字 符 所代表的字符 \0 NULL字符 \f 换页符 \b 退格符 \r 回车符 \t 水平制表符 \" 双引号 \n 换行符 \' 单引号 \v 垂直制表符 \\ 反斜杠 有关转义字符的使用方法,如以下代码所示,注意加粗的文字。 转义符的使用 以上代码为光盘目录里“代码\第02章\sample01.htm”的内容,其运行结果如图2.1所示。在该图中 可以看出,“\'”输出为“'”、“\"”输出为“"”、“\\”输出为“\”,而“\n”就在警告框里产生了换行。 图2.1 sample01.htm的运行结果 2.5.5 布尔常量 布尔常量是比较简单的一种常量,只有两种值,一种是true(真),一种是false(假)。有些时候, JavaScript也可以把0和1分别看成false和true。布尔常量常用于条件判断语句中。 2.5.6 数组常量 数组就是一些数据的集合,在JavaScript中数组的数据可以是任何数据类型,包括数组。数组的 定义方法如下所示。 数组名 = [数组值1 , 数组值2 , 数组值3 ⋯] 在数组中有以下两个重要的概念。 ❑ 数组长度:所谓数组长度就是数组中包含多少个数据。 ❑ 数组下标:数组是使用下标来获取数组中的某个值。数组下标值是从0开始的,下标的最大值 为数组长度减1。获取数组中某个值的方法如下所示。 数组名[下标值] 有关数组的使用方法如以下代码所示,注意加粗的文字。 数组 32 励 志 照 亮 人 生   编 程 改 变 命 运 零基础学 JavaScript 以上代码为光盘目录里“代码\第02章\sample02.htm”的内容,其运行结果如图2.2所示。 在定义数组常量时,还可以省略某些数据值,直接用逗号隔开即可,如以下代码所示,注意加粗 的文字。 数组 以上代码为光盘目录里“代码\第02章\sample03.htm”的内容,其运行结果如图2.3所示。在本例 中数组的长度为4,arr[0]的值为字符串“JavaScript”,arr[1]和arr[3]的值都为undefined,arr[2]的值 为布尔值true。 图2.2 sample02.htm的运行结果 图2.3 sample03.htm的运行结果 33 励 志 照 亮 人 生   编 程 改 变 命 运 第 2 章 数据类型、常量与变量 2.6 变量 变量(Variable)是相对常量而言的,常量通常是一个不会改变的固定值,而变量是对应到某个 值的一个符号,该符号中的值可能会随着程序的执行而改变,因此称为“变量”。在很多情况下,变 量又称为标识符(Identifier)。 2.6.1 变量的命名方式 变量可以用来存储数据,JavaScript中是通过变量名来调用这些被存储的数据。变量名必须以 ASCII字符或下划线(_)开头,第1个字母不能是数字,但其后可以是数字或其他字母。以下代码中 都是合法的变量名。 x X _x x_1 注意 在JavaScript中对大小写是敏感的,因此,变量x与变量X是两个不同的变量。 虽然变量名只要不是以数字开头即可,但是对于变量名有个不成文的命名约定,这个约定与Java 的命令约定相同。 ❑ 从变量名上应该可以看出变量的作用。例如,要设置一个代表当天日期的变量,将变量名设置 为“date”,要比设置为“abc”更易于理解。 ❑ 如果变量名是一个单独的单词,如“date”,那么该变量名应该全部使用小写;如果变量名由 两个或多个单词组成,那么从第二个单词开始,后面的所有单词的首字母都必须大写,如 “theDate”、“otherDate”等。 ❑ 变量名不能与JavaScript中的保留字相同。 注意 以上命名约定只是一个“约定”而已,除了不能与保留字相同之外,其余两点约定可以遵守, 也可以不遵守。 2.6.2 变量类型 JavaScript与其他程序语言之间有些区别,其他程序语言大多需要为变量指定一个数据类型,例 如,将一个变量指定为整数型,那么该变量就只能存储整数型数据,不可以存储浮点型或其他类型的 数据。而JavaScript中的变量是无类型(Notype)的,这就意味着在JavaScript中的变量可以是任何一 种数据类型。例如,先将一个数字型数据赋给一个变量,在程序运行过程中,再将一个布尔型数据赋 给同一个变量,这在JavaScript中是合法的,如以下代码所示。 x = "abc"; x = 101; 2.6.3 定义变量 在JavaScript中,使用一个变量之前,必须要先定义该变量。只有在定义了一个变量之后,系统 34 励 志 照 亮 人 生   编 程 改 变 命 运 零基础学 JavaScript 才会准备一个内存空间来存储该变量的值,而程序员可以通过变量名来存储或读取变量的值。在 JavaScript中可以使用关键字var来定义一个变量,如以下代码所示。 var x; var X; var _x; var x_1; 一个var关键字也可以同时定义多个变量,变量之间用逗号隔开,如以下代码所示。 var x,X,_x,x_1; 在定义了变量之后,如果没有为变量赋值,那么该变量的初始值为undefined。JavaScript支持在 定义变量的同时为变量指定初始值,如以下代码所示。 var x = "abc"; var n = null; var bFlag = true; var theDate = "2007-6-20" , i =100; 注意 变量一旦被定义之后,是不能再被删除的。 2.6.4 定义变量的注意事项 虽然在JavaScript中定义变量是一件十分简单的事情,但是在定义变量时,有几点是需要注意的。 1. 重复定义变量 在JavaScript中可以重复定义变量,并且不会产生任何错误,如以下代码所示,注意加粗的文字。 重复定义变量 以上代码为光盘目录里“代码\第02章\sample04.htm”的内容,其 运行结果如图2.4所示。在本例中变量x被定义了两次,并且每次定义 时都赋予了不同类型的初始值。在执行该文件时,是不会出现任何错 误的。 2. 变量必须要先定义后使用 在JavaScript中的变量必须要先定义后使用,没有定义过的变量不 35 励 志 照 亮 人 生   编 程 改 变 命 运 第 2 章 数据类型、常量与变量 图2.4 sample04.htm的运行结果 能直接使用,如以下代码所示,注意加粗的文字。 未定义变量 以上代码为光盘目录里“代码\第02章\sample05.htm”的内容。在本例中,没有定义变量x,但是 却使用document.write()方法来输出x的值,因此会产生错误,其错误信息如图2.5所示。 图2.5 sample05.htm的错误信息 3. 给未定义的变量赋值 虽然JavaScript不能读取未定义的变量,但是JavaScript却可以给一个未定义的变量赋值。此时 JavaScript会隐式定义该变量,如以下代码所示,注意加粗的文字。 给未定义的变量赋值 以上代码为光盘目录里“代码\第02章\sample06.htm”的内容。在本例中,虽然没有使用var关 36 励 志 照 亮 人 生   编 程 改 变 命 运 零基础学 JavaScript 键字定义x变量,但是却可以直接给x变量赋值,其运行结果如图2.6所示。 注意 隐式定义的变量默认为全局变量。有关全局变量的概念将在后 续章节里介绍。 4. 引用未赋值的变量 已经定义但未赋值的变量可以引用,此时的变量值为undefined。 如以下代码所示,注意加粗的文字。 给未定义的变量赋值 以上代码为光盘目录里“代码\第02章\sample07.htm”的内容。在本例中,虽然定义了变量x,但 是并没有为变量x赋值。因此,在输出变量x值时,显示为undefined,其运行结果如图2.7所示。 2.6.5 变量的值 由于JavaScript的变量不需要指定数据类型,因此变量值可以是 任何类型的数据,包括以下几种。 ❑ 数字型(Number):整数型或浮点数,如123或12.3。 ❑ 布尔型:又称逻辑型(Logical),只能是true或false。 ❑ 字符串型(String):用单引号或双引号括起来的字符串。 ❑ 空值(Null):这是一种特殊的类型,表示没有值,即该变量 为空。 ❑ 未定义值(Undefined):表示变量还没有被赋值。 2.6.6 变量的有效范围 变量可以根据其有效范围分为全局变量与局部变量两种。其中全局(Global)变量从定义开始, 到整个JavaScript代码结束为止,都可以使用;而局部(Local)变量只有在函数内部才能生效。 有关全局变量的使用方法如以下代码所示,注意加粗的文字。 37 励 志 照 亮 人 生   编 程 改 变 命 运 第 2 章 数据类型、常量与变量 图2.6 sample06.htm的运行结果 图2.7 sample07.htm的运行结果 全局变量 请单击 以上代码为光盘目录里“代码\第02章\sample08.htm”的内容,其运行结果如图2.8所示。本例代 码中的关键点如下。 (1)定义了一个全局变量x,并为变量x赋值。 (2)定义了一个名为linkClick的函数,虽然在该函数里没 有定义变量x,但是变量x也能在该函数里直接使用,因为这是 一个全局变量。 (3)在网页的正文里创建了一个超链接,单击该超链接将 会执行linkClick()函数,弹出一个警告框,警告框里的内容为 全局变量x的值。 (4)在网页正文的最后,增加了另一个JavaScript代码块, 该代码块的作用是输出全局变量 x的值。虽然该代码块与 标签中的JavaScript代码块是分离的,但也可以直接使 用上面代码块里定义的全局变量x。 有关局部变量的使用方法如以下代码,注意加粗的文字。 局部变量 请单击 以上代码为光盘目录里“代码\第02章\sample09.htm”的 内容,其运行结果如图2.9所示。在本例中,linkClick()函数中 的变量x为局部变量。 2.6.7 使用变量的注意事项 下面介绍在使用变量时,需要注意的事项。 1. 变量的优先级 如果在函数体里定义了一个与全局变量名相同的局部变 量,那么在该函数体里全局变量将不起作用,就相当于全局变 量并不存在,如以下代码所示,注意加粗的文字。 局部变量的优先级比同名的全局变量要高 以上代码为光盘目录里“代码\第02章\sample10.htm”的内容, 其运行结果如图2.10所示。本例代码中的关键点如下所示。 (1)定义了一个名为x的变量,并为变量x赋值,该变量为全局 变量。 (2)定义了一个函数,在该函数里同样定义了一个名为x的局部 变量,并为该变量赋上另一个值。 (3)调用函数,此时输出变量x的值为局部变量的值。 (4)输出变量x的值,此时x的值为全局变量的值。 提示 如果局部变量与全局变量的名称一样,就好像在函数体内定义了另一个变量,全局变量在该函 数体内并不起到任何作用。 2. 在函数体内定义全局变量 在函数体内使用var关键字定义的变量为局部变量,如果要在函数体内定义全局变量,则不能使用 var关键字,只需要直接给变量赋值即可,如以下代码所示,注意加粗的文字。 在函数体内定义全局变量 40 励 志 照 亮 人 生   编 程 改 变 命 运 零基础学 JavaScript 图2.10 sample10.htm的运行结果 以上代码为光盘目录里“代码\第02章\sample11.htm”的内容, 其运行结果如图2.11所示。本例代码中的关键点如下所示。 (1)定义了一个函数。 (2)在函数体内使用var关键字定义了一个名为x的变量,该变 量为局部变量,只能在函数体中使用。 (3)在函数体内直接为变量y赋值,该变量为全局变量。 (4)在函数体外输出全局变量的值。 注意 1. 在本例中,如果在函数体外输出变量x的值,将会产生错误。 2. 全局变量最好在函数体外定义,所以在函数体内定义局部变量时,最好都加上var关键字。 3. 嵌套函数体中的变量的有效范围 在JavaScript中的函数是可以嵌套的,每个嵌套函数中的变量都可以在该函数体内,以及嵌套的 函数体内起作用,但不能在父级或父级以上的函数体内起作用,如以下代码所示,注意加粗的文字。 嵌套函数中的变量 以上代码为光盘目录里“代码\第02章\sample12.htm”的内容,其运行结果如图2.12所示。本例 代码中的关键点如下所示。 (1)定义了一个名为writeText的函数。 (2)在writeText()函数中定义了一个名为x的变量,该变量可以 在整个writeText()函数中使用,包括在该函数中嵌套的函数。 (3)在writeText()函数中嵌套了一个名为writeText1的函数。 (4)在writeText1()函数中定义了一个名为y的变量,该变量可以 在整个writeText1()函数中使用,但不能在writeText()函数中使用。 (5)在writeText1()函数中可以输出变量x与变量y的值。 (6)在writeText()函数中只可以输出变量x的值,不能输出变量y的值。 4. 局部变量在整个函数体内都有效 JavaScript中局部变量的有效范围与其他语言中局部变量的有效范围不同,JavaScript中只要在函 数体内定义了局部变量,该局部变量就会在整个函数体内有效,而不是从定义局部变量的那行代码开 始起效,如以下代码所示,注意加粗的文字。 局部变量在整个函数体内都有效 以上代码为光盘目录里“代码\第02章\sample13.htm”的内容,其运行结果如图2.13所示。本例 代码中的关键点如下所示。 (1)定义一个名为x的全局变量,并为该变量赋值。 (2)定义一个函数,在该函数中第一个语句就是输出变量x的值。 因为在该函数中还没有定义名为x的局部变量,从理论上而言,此时 变量x应该还是全局变量x,其值应该是“这是一个全局变量”,可事 实上,变量x此时的值为“undefined”,如图2.13所示。 (3)造成变量x值为“undefined”的原因是在函数定义了名为x 的局部变量,在JavaScript中,无论在哪里定义了局部变量,都会在 整个函数体内生效,因此函数体中的代码等同于以下代码。 var x; document.write(x+"
"); x = "这是一个局部变量"; document.write(x+"
"); JavaScript的这种局部变量在整个函数中都有效的情况还体现在不区分程序块上,如以下代码所 示,注意加粗的文字。 局部变量在整个函数体内都有效 43 励 志 照 亮 人 生   编 程 改 变 命 运 第 2 章 数据类型、常量与变量 图2.13 sample13.htm的运行结果 以上代码为光盘目录里“代码 \第02章 \ s ample14 .h tm”的内 容,其运行结果如图2.14所示。本例代码中的关键点如下所示。 (1)定义一个函数,并在该函数中创建了一个for循环语句。 (2)在循环语句中定义了两个变量,一个是用来控制循环的变量 j,另一个是局部变量k。 (3)在循环语句中可以循环输出变量j的值。 (4)在循环语句外也可以输出变量j和k的值。这一点在其他语言 中是不允许的。 提示 为了让JavaScript程序更易于理解,最好在函数的开头先定义局 部变量。 2.7 保留字 在为变量命名时是不能与JavaScript中的保留字同名。因为这些保留字对于JavaScript来说具有特 殊意义,它是JavaScript语法中的一部分。事实上,保留字不但不能用作变量名,也不能用作函数名 及循环标签。 2.7.1 JavaScript中的保留字 在JavaScript中一共有28个保留字,如表2.2所示列出了所有的JavaScript中的保留字,这些保留字 不能用作变量名、函数名及循环标签。 表2.2 JavaScript中的保留字 break do if switch typeof case else in this var catch false instanceof throw void continue finally new true while default for null try with delete function return 2.7.2 ECMA中的保留字 除了JavaScript中的保留字之外,如表2.3所示中是ECMAScript扩展的保留字。使用这些保留字是 ECMAScript用来作为扩展语言使用的,在JavaScript中不会阻止程序员使用这些保留字作为标识符, 但是应该尽量避免使用。 44 励 志 照 亮 人 生   编 程 改 变 命 运 零基础学 JavaScript 图2.14 sample14.htm的运行结果 表2.3 ECMA扩展的保留字 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 debugger 2.7.3 避免使用的字符串 除了JavaScript和ECMA中的保留字不能作为标识符外,如表2.4所示中的字符串也尽量不要用来 作为标识符使用,因为这些字符串都是JavaScript与ECMAScript中的全局变量名或全局函数名。如果 使用这些字符串作为标识符,很容易产生错误。 表2.4 避免使用的字符串 arguments Array Boolean Date decodeURI decodeURIComponent encodeURI Error escape eval EvalError Function Infinity isFinite isNaN Math NaN Number Object parseFloat parseInt RangeError ReferenceError RegExp String SyntaxError TypeError u
本文档为【02 数据类型、常量与变量】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_823761
暂无简介~
格式:pdf
大小:1MB
软件:PDF阅读器
页数:21
分类:互联网
上传时间:2011-09-29
浏览量:10