1、第一讲:JavaScript概述,课程内容安排,JavaScript背景知识 简单的脚本语言 第一个JavaScript程序 注意事项,JavaScript背景知识,JavaScript的历史 Netscape LiveScript JavaApplet JavaScript 制定标准 97年发布了ECMA-262语言规范 ECMAScript JavaScript现况 JavaScript的未来,简单的脚本语言,什么是脚本语言 脚本语言是一种应用程序扩展语言,用于系统的扩展,使其按用户的意愿去运行。 所有的基础功能由系统提供,脚本语言在更高一层次描述如何调用系统的接口。 解释执行。 脚本语言
2、的分类 嵌入式 非嵌入式 JavaScript能做什么 JavaScript和其它语言的异同 JavaScript同Java的异同,第一个JavaScript程序,预备知识 document对象的write方法将字符串“Hello World”输出显示在浏览器客户区里。 使用window对象的alert方法以消息框的形式输出信息。 JavaScript程序嵌入HTML文档的常用方法就是将代码放在“”标签对中 。,JavaScript代码在HTML文档中的形式。 链入 嵌入,参考:,第一个JavaScript程序,01 02 03 04 05 06 07 08 / JavaScript程序语句
3、/ JavaScript程序语句 09 / / 更多的JavaScript程序语句 10 11 12 ,嵌入方式 本书使用的方式,第一个JavaScript程序,JavaScript编辑器的选择 记事本 Visual Studio Aptana DreamWeaver WebStorm 编写“HelloWorld” 打开记事本,输入以下代码:另存为“helloworld.html”,扩展名为“html”或“htm”. 在IE中打开网页文件,运行程序。,01 02 03 04 document.write(“Hello World!“); / 输出经典的Helloworld 05 06 07 ,
4、注意事项,浏览器对JavaScript的支持 在互联网发展的过程中,几大浏览器之间也存在激烈的竞争。JavaScript是Netscape公司的技术,其它浏览器并不能和Navigator一样良好的支持JavaScript,因为得不到使用许可。微软公司为能使其IE浏览器能抢占一定市场份额,于是在IE中实现了称为JScript的脚本语言,其兼容JavaScript,但是和JavaScript间仍然存在版本差异。因此,编程人员在编码时仍然考虑不同浏览器间的差别。 检测当前所用的浏览器,01 / 程序开始 02 document.write(“名称:“ + navigator.appName+“);
5、/ 浏览器名称 03 document.write(“版本号:“ + navigator.appVersion+“); / 浏览器版本号 04 document.write(“发行代号:“+navigator.appCodeName+“); / 浏览器的内部发行代号 05 ,注意事项,大小写敏感 JavaScript代码是大小写敏感的,Name和name是不同的标识符,编码时应当予以注意。同一个词如果如果各个字母间大小写不同时,系统将当作不同的标识符来处理,相互之间没有任何联系 代码示例,01 Name = “sunsir”; / 大写字母开头 02 name = “foxsir”; / 汪写
6、字母开头,注意事项,空格与换行 代码中多余的空格会被忽略,同一个标识符的所有字母必须连续。 一行代码可以分成多行书写。 单行: 代码写于一行中,用分号作为语句结束标志,if(1=1 ,分成多行、规范的书写如下:,01 If( 1=1 / 输出“false” 08 ,第二讲:数据类型,课程内容安排,基本数据类型 复合数据类型 其他数据类型 数据类型的转换,基本数据类型,在JavaScript中,字符串型数据是用引号括起的文本字符串。 在JavaScript中不区分“字符”和“字符串”,字符也被当作字符串处理。字符串中可以包含用于特殊目的字符。,01 / 脚本程序开始 02 07 ,基本数据类型,
7、数值型数据 JavaScript中用于表示数字的类型称为数字型,不像其它编程语言那样区分整型、浮点型。数字型用双精度浮点值来表示数字数据,可以表示(-253,+253)区间中的值。数字的值可以用普通的记法也可以使用科学记数法。 表示方法如下所示:,10; / 数字 10.1; / 数字 0.1; / 数字 3e7; / 科学记数 0.3E7; / 科学记数,复合数据类型,对象的概念。 在面向对象的设计模式中,将数据和处理数据的方法捆绑在一起形成的整体,称为对象。它封装了数据和操作数据的方法 ,使用时要先创建这个对象,用new运算符来调用对象的构造函数。 日期对象 。 JavaScript将与日
8、期相关的所有特性封装进Date对象,主要用来进行一些与时间相关的操作,比如获取当前系统时间,使用前要先创建该对象的一个实例:,date = new Date( ); / 直接创建 date = new Date( val ); / 指定日期创建 date = new Date( y , m, d , h , min , sec ,ms ); / 指定日期创建,复合数据类型,全局对象。 全局对象是所有全局方法的拥有者,用来统一管理全局方法,全局方法也就是指全局函数。该对象不能使用new运算符创建对象实例,所有方法直接调用即可。 数学对象 数学对象(Math)封装了与数学相关的特性,包括一些常数和
9、数学函数,主要使用简单一些基本的数学计算。比如求正弦、正切、余弦、取绝对值等。 下面是这个对象的应用实例。,复合数据类型,01 / 脚本程序开始 02 08 ,从Math对象中获取圆周率常数,计算一个半径为2单位的圆的面积,复合数据类型,字符串对象 String对象封装了与字符串有关的特性,主要用来处理字符串。通过String对象,可以对字符串进行剪切、合并、替换等等。可以调用该对象的构造函数创建一个实例,其实在定义一个字符串类型变量时就也创建了一个String对象实例。 调用String对象的方法或属性形式如“对象名.方法名”或“对象名.属性名”,构造函数如下: String(strVal)
10、;。 看这样的一个实例,文本串中将李白静夜思的各个部分分别提取出来,并格式化输出。标题加粗,文本居中对齐,诗歌正文颜色为灰色。 示例代码如下所示。,复合数据类型,01 02 “ ); / 输出HTML标签“”,并设置居中对齐 07 document.write( partial ); / 输出标题 08 partial = comment.slice( 3, 5 ); / 取出作者 09 document.write( “ ); / 输出换行标签 10 document.write( partial ); / 输出作者 11 partial = comment.slice( 5, 17 );
11、/ 取出第一句诗文 12 partial = partial.fontcolor(“gray“); / 设置颜色为gray(灰色) 13 document.write( “ ); / 输出换行标签 14 document.write( partial ); / 输出诗句 15 partial = comment.slice( 17, 29 ); / 取出第二句诗文 16 partial = partial.fontcolor(“gray“); / 设置颜色为gray(灰色) 17 document.write( “ ); / 输出换行标签 18 document.write( partial
12、); / 输出诗句 19 document.write( “ ); / 输出HTML标签“”的结束标签 20 21 ,复合数据类型,数组 数组是JavaScript中另一重要的基本数据类型。内部对象Array封装了所有和数组相关的方法和属性,其内存在多个数据段组合存储。可以形象的理解为一种有很多连续房间的楼层,每个房间都可以存放货物,提取货物时只需要给出楼层号和房间编号即可 。 下面是一个实例,创建一个数组用于保存古代几个大诗人的名字,通过遍历数组逐一输出每个诗人的名字 。,01 / 脚本程序开始 02 “); / 输出标题 05 for( n in poets ) / 逐个输出数组元素 06
13、 07 document.write( “ + poetsn ); / 输出诗人的名字 08 09 10 ,其他数据类型,函数 在JavaScript中,“函数”充当了两个角色,一个运用在数据类型方面,另一个运用在子程序设计方面 。关于函数在本书后面的章节中会进一步讲到,这里先就不多讲了。 空值 之前所讲过的每一种JavaScript数据类型都有自己的内容,而编程中却需要一种类型来表示“什么都没有”。null类型就是为此目的而产生,其表示一个空值。可以使用null和一个变量进行比较以测试该变量是否拥有内容,通常用来判断对象的创建或引用是否成功。 编写程序,测试null值 ,示例代码如下所示。,
14、其他数据类型,01 / 脚本程序开始 02 “ ); / 输出提示 08 09 if( y = null ) / 如果y为空则 10 11 document.write( “y的值为空“ ); / 输出提示 12 13 14 ,不确定的类型 null值表示一个变量拥有空值。可以理解为已经把给“空”给了某个变量,而undefined则表示一个变量什么都没有得到,连“空”都没有。通常用来判断一个变量是否已经字义或已经赋值。,数据类型的转换,隐式转换 在程序运行时,系统根据当前上下文的需要,自动将数据从一种类型转换为另一种类型的过程称为隐式类型转换。其实这个转换很多时候都在我们身边悄悄发生,比如我们
15、使用document.write和alert方法时,很多时候就发生了隐式转换,也就是无论你向这两个方法 中输入什么类型的数据,最后都被转换为字符串型数据。 显式 转换 与隐式类型转换相对应的是显式类型转换,此过程需要手动转换到目标类型。要将某一类型的数据转换为另一类型的数据需要用到特定的方法。 下面是这两种方法使用的示例。,数据类型的转换,01 02 ,The end,课程内容安排,多余的空格会被忽略,01 if ( 1 / 一个语句分多行书写 02 =1 / 将一行代码分成多行书 03 / 将一行代码分成多行书 09 / 将一行代码分成多行书,分成多行的字符串,01 var Message
16、= “JavaScript编程,简单,有趣!”; / 单行中的字符串 02 var message = “JavaScript编程,” + / 多行中的字符串 03 “简单,有趣!”;,可有可无的分号 当两个程序语句处于一行中时用分号隔开,否则可以不用分号.,第三讲:变量和常量,课程内容安排,常量 变量 JavaScript中关键字,常量,常量的种类 在数学和物理学中,存在很多种常量,它们都是一个具体的数值或一个数学表达式。然而在编程语言中基于数据类型的分类,常量包括字符串型、布尔型、数值型和null等。 下面是几种常量。,“今天天气真好!”; / 字符串常量 1; e1; 077; / 数字
17、型常量 true; false; / 布尔型常量,常量,常量的使用方法 常量直接在语句中使用,因为它的值不需要改变,所以不需要再次知道其存储地点。下面通过举例演示常量的使用方法,01 / 脚本程序开始 02 JavaScript编程,乐趣无穷!“ ); / 使用字符串常量 04 document.write( “ + 3 + “周学通JavaScript!“ ); / 使用数值常量3 05 if( true ) / 使用布尔型常量true 06 07 document.write( “if语句中使用了布尔常量:“ + true ); / 输出提示 08 09 document.write( “
18、八进制数值常量011输出为十进制:“ + 011 ); / 使用8进制常量和十进制常量 10 document.write( “十六进制数值常量0xf输出为十进制:“ + 0xf ); 11 12 ,变量,什么是变量 顾名思义,变量是指在程序运行过程中值可以发生改变的量。更为专业的说是指可读写的内存单元。可以形象的理解为一个个可以装载东西的容器,变量名代表着系统分配给它的内存单元,如图所示。 变量的定义方式 JavaScript中,用如下方式定义一个变量。 var 变量名 = 值; 变量名 = 值;,变量,练习变量的定义和使用。定义一组各种常见类型的变量并输出其值。,01 02 “ ); 11
19、 document.write( b ); / -对象是输出各变量的内容 12 document.write( “ ); / 输出换行标签 13 document.write( n ); 14 document.write( “ ); / 输出换行标签 15 document.write( m );16 document.write( “ );/ 输出换行标签 17 document.write( o ); 18 document.write( “ ); / 输出换行标签,变量,19 document.write( p ); 20 document.write( “ ); / 改写各变量的值
20、21 str = “这是一个字符串“; 22 b = false; 23 n = 20; 24 m = 30; / 改变变量o的引用,指向一个新建的数组 25 o = new Array( “data1“, “data2“ ); 26 document.write( “ ); 27 document.write( str ); / 分别使用write在当前文档- 28 document.write( “ ); / -对象是输出各变量的内容 29 document.write( b ); 30 document.write( “ ); / 输出换行标签 31 document.write( n
21、); 32 document.write( “ ); / 输出换行标签 33 document.write( m ); 34 document.write( “ ); / 输出换行标签 35 document.write( “数组o的数据为:“ ); 36 document.write( o ); 37 document.write( “数组o的长度为:“ + o.length ); 38 document.write( “ ); 39 var pp; 40 document.write( pp ); / 输出未定义变量PP 41 var pp = 20; 42 43 ,变量,变量的命名规则
22、JavaScript变量的命名必须以字母或下划线开始,后可跟下划线或数字,但不能使用特殊符号。,name / 合法的变量名 _name / 合法的变量名 name10 / 合法的变量名 name_10 / 合法的变量名 name_n / 合法的变量名 12name / 不合法的变量名 $name /不合法的变量名 $#name /不合法的变量名,下面来看关于变量命名的实例:,变量,01 / 脚本程序开始 02 “ ); / 输出交换前两变量的值 06 document.write( “nA = “ + nA ); / 输出nA 07 document.write( “nB = “ + nB )
23、; / 输出nB 08 var nTemp = nA; / 交换两变量的值 09 nA = nB; 10 nB = nTemp; 11 document.write( “交换后 “ ); / 输出交换后两变量的值 12 document.write( “nA = “ + nA ); / 输出nA 13 document.write( “nB = “ + nB ); / 输出nB 14 15 ,变量,变量的作用范围 作用域是指有效范围,JavaScript变量的作用域有全局和局部之分。全局作用域的变量在整个程序范围都有效,局部作用域指作用范围仅限于变量所在的函数体。JavaScript不像其它语
24、言那样有块级作用域。变量同名时局部作用域优先于全局作用域。 下面来看一个相关的例子。,01 / 脚本程序开始 02 局部作用范围的nA:“ + nA ); / 输出nA 08 09 func(); / 调用函数func 10 document.write( “全局作用范围的nA:“ + nA ); / 输出全局nA 11 12 ,变量,01 / 脚本程序开始 02 “ + actorAryn ); / 通过变量actorAry操作角色数组 08 09 10 ,变量的用途 变量主要用于存储数据,比如计算的结果、存储用户输入的数据等。一部分变量作为对象的引用,通过变量来操作对象的内容或调用对象的方
25、法 。这些作用在以后的学习过程中会体会到。下面举一个例子来简单的说明。,JavaScript中关键字,关键字 关键字为系统内部保留的标识符,其用途特殊,用户的标识符不能与关键字相同。下面列出JavaScript中常见关键字 。所列出的是一些常用的关键字,其中大部分内容读者现在不必去详细了解,以后用到相关内容时将再作讲解。,JavaScript中关键字,第四讲:表达式与运算符,课程内容安排,表达式 操作数 运算符介绍 算术运算符 关系运算符 字符串运算符 赋值运算符 逻辑运算符 位运算符 其它运算符 运算符的优先级,表达式,表达式 表达式是产生一个结果值的式子,JavaScript的表达式是由常
26、量、变量和运算符等组成。 表达式可以作为参数传递给函数,或将表达式结果赋予给变量保存起来。 表达式的结果值有多种类型,比如布尔型、字符串型或数值型等,因此常有逻辑表达式、数值表达式和布尔表达式之说。 下面举例说明如何定义和使用表达式。,操作数,操作数 操作数是指表达式中的变量或常量,在javascript中也包含表达式的返回值(实际上就是一个常量),常提供计算用的数据。 下面是操作数在表达式中的形态。( A + B + C ) / D其中A、B、C、D就是操作数,而“+”和“/”则是操作符,操作符将在下一节介绍。操作数的数据类型由表达式的类型和运算符所支持的数据类型来决定的,上述代码中若表达式
27、是数值表达式则需要A、B、C和D的类型皆为数值或可以转换为数值。,运算符介绍,运算符 运算符是指程序设计语言中有运算意义的符号,类似于普通数学里运算符。通常,每一门数学都定义了一个数集和在数集上可以进行的运算。程序设计语言也一样,规定了其支持的数据类型以及数据可以进行的运算。JavaScript的运算符包含算术运算符、逻辑运算符和一些特殊的运算符。 在JavaScript中有单目和多目之分,单目运算符带一个操作数,多目运算符带多个操作数 ,如下所示。( 1 2 ) 3 / 数学表达式+A / 左结合递增 操作数的类型 表达式中的操作数要么是常量要么是变量,常量和变量都有其特定的数据类型。构成表
28、达式的操作数的数据类型是由变量或常量的类型来确定 。下面来看一个例子。,算术运算符,加法运算符 加法运算符使用数学符号“+”,属于双目运算运算符,返回两个操作数的算术和。操作数的类型要求为数值型,如果是字符串型则意义不同,主要运用在数值求和的场合,其语法如下代码所示。操作数1 + 操作数2。 示例如下所示。,01 / 脚本程序开始 02 08 ,算术运算符,减法运算符 减法运算符使用数学符号“”,属于双目运算符,返回两个操作数的算术差,操作数类型要求为数值型。含义与数学上的减法计算完全一样,使用的形式如下代码所示。操作数1 操作数2,01 / 脚本程序开始 02 08 ,算术运算符,乘法运算符
29、 乘法运算符使用符号“*”,属于双目运算符,返回两个操作数的算术积。运算意义上完全等同于数学上的乘法计算,使用语法如下所示 。操作数* 操作数2,01 02 var employee = 300; / 雇员总数 03 var prize = 370; / 每人奖金数额 04 var total = employee * prize; / 预算总额 05 alert( “预算:“ + total + “元“ ); / 输出总额 06 ,算术运算符,除法运算符 除法运算符使用符号“/”,也是属于双目运算符,操作数类型要求为数值型。其返回两个操作数之商,JavaScript返回的商是实数集内的数据,
30、也就是浮点型数据。意义上等同于数学中的除法运算,因此可用在求商的场合,使用语法如下。操作数1 / 操作数2,01 / 脚本程序开始 02 07 ,算术运算符,模运算符 取模运算符使用符号“%”,其作用是求一个数除以另一个数的余数。操作数的类型要求为数值型或能转换为数值型的类型,属于双目运算符。事实上“模”可以这样理解,如手表上的小时刻度,每到12点以后就是1点,此钟表的模为12。通常取模运算可以取求某个数的倍数 。,01 02 for( i = 1; i,算术运算符,负号运算符 负号运行符使用符号“-”,取负也就是等于取反。等同于数学意义的上负号,属于单目运算符,语法如下。-操作数 这里就负号
31、运算符来看一个例子。,01 02 07 ,算术运算符,正号运算符 正号运算符使用符号“+”,针对数值类型操作数,意义上等同于数学上的正号。属于单目运算符,语法如下。+ 操作数 递增运算符代码的装入 递增运算符使用符号“+”,也称为自增运算符,属于单目运算符。可使数值类型的变量值自增一,操作数只能是变量。使用形式分左结合与右结合两种,左结合在表达式中的效果是先递增再使用,右结果则是先使用再递增。语法如下:变量名+; / 右结束递增+变量名; / 左结合递增代码的执行,算术运算符,递减运算符 递减运算符使用符号“-”,也称为自减运算符,可使变量的值自减一。效果与递增运算符完全相反,也有左结合与右结
32、合之分,情况与递增运算符相同,此不赘述,下面来看一个例子。,01 02 “ ); / 输出换行标签 06 a- ; / a自减一(右结合) 07 document.write( a ); / 输出变量a 08 document.write( “ ); / 输出换行 09 -a; / a自减一(左结合) 10 document.write( a ); / 输出变量a 11 document.write( “ ); / 输出换行 12 if( -a = 2 ) / 测试左、右结合位于表达式中的情况 13 14 document.write( “左结合的情形“ ); / 输出提示信息 15 16 i
33、f( a- = 2 ) / 等于2时 17 18 document.write( “右结合的情形“ ); / 输出提示信息 19 20 21 ,关系运算符,相等运算符 相等运算符使用符号“=”,判断两个操作数是否相等。如果相等返回布尔值true,否则返回false。属于双目运算符,两个操作数的数据类型可以任意。运行时,“=”操作符将两端的操作数转换为同一种数据类型后再作比较。使用语法如下:操作数A = 操作数B 等同运算符 前述及的相等运算符“=”进行的是非严格意义上的相等性判断,即通过类型转为后相等的也返回true。而等同运算符“=”是严格意义上的相等,两个值和它们的类型完全一致时才返回tr
34、ue,使用语法如下:操作数1 = 操作数2,关系运算符,不等运算符 不相等运算符使用符号“!=”,属于双目运算符,返回一个布尔值表示两个操作数是否相等。两个操作数类型任意,同时可以是变量也可以是常量。使用语法如下:操作数1 != 操作数2 不等同运算符 不等同运算符,使用符号“!=”,属于双目运算符。效果与等同运算符正好相反,如果两个数严格不相等则返回true,使用语法如下。操作数1 != 操作数2,关系运算符,小/大于运算符 小于运算符是判断第一个操作数是否小于第二个操作数的运算符,返回一个布尔值。使用符号“”表示,常用于逻辑表达式中。使用语法如下:操作数1 操作数2 大于运算符与小于运算符
35、相似,效果相反。 instanceof运算符 instanceof运算符返回一个布尔值,表明某对象是否是某个类的实例。得到一个对象时,有时需要得知其属于哪个类,确定对象的身份。使用语法如下:result = Obj instanceof ClassEditPlus,关系运算符,小/大于或等于运算符 小于或等于符运算符判断第一个操作数和第二个操作数间是否是小于等于关系,使用符号“=”。当第一个操作数小于或等于第二个操作数时表达式返回true,否则返回false。大于或等于运算符相似,这里就不多讲了。 in运算符 in运算符检查对象中是否有某特定的属性。可以通过in运算符取得数组索引集合,这是个非
36、常有用的运算符。语法如下:Result = property in Object;,字符串运算符,字符串运算符 字符串是一种数据类型,同样也存在相应的计算,因此程序设计语言也为字符串定义了相应的运算符。主要包括+、=和=这几种,这里主要讲解运算符“+”。 运算符“+”,称为连接运算符,它的作用是将两个字符串按顺序连接成为新的字符串。大大简化了字符串表达式的写法 。这个运算符在字符串处理中使用是相当的广泛。在前面见得也比较多了,这里就不详细讲解了。,var str1 = “今天星期几了?”; / 字符串变量 var str2 = “星期五”; / 字符串变量 document.write( st
37、r1 + str2 ); / 输出连接后的字符串,赋值运算符,赋值运算符 赋值运算符用“=”表示,用于给变量赋值。赋值运算符将值与变量绑定起来,也就是说,值写入了变量所引用的内存单元。 通常,给变量填入数据最直接的办法就是使用赋值运算符将值赋予变量。如下代码所示:var name = “Jet”; 以上代码将“Jet”赋予变量name,“=”运算符左边的操作数称为左值,其右边的操作数称为右值。左值必须是变量,右值可以是变量、常量或表达式。,逻辑运算符,逻辑与、或、非运算符 逻辑与运算符用“&”表示,逻辑或运算符用“|”表示,它们属于双目运算符,操作数被当成布尔类型,可以是变量也可以是常量。 逻
38、辑与运算符使用语法如下所示。操作数1 & 操作数2 “|”运算符语法如下: 操作数1 | 操作数2 逻辑非运算符“!”,属于单目运算符,对操作数的逻辑值取反,操作数可以是变量或常量。,位运算符,位与、位或、位异或和位非运算符 位与、位或、位异或分别使用符号“&”、“|”、“”,属于双目运算符。 位与运算是指把两个操作数所对应的二进制位相与,对应两个位都为1时结果值中对应位也为1,否则为0。 位或是指对应位间如果都不为0则结果的相应位为1,否则为0。 位异或是当两个操作数对应位不相同时结果的相应位即为1,否则为0 位非运算符“”实现对操作数按位取反运算,属于单目运算符。操作数可以是任意JavaS
39、cript类型的常量或变量,逻辑运算符,左移运算符 、带符号右移运算符 和高位补0右移运算符 左移位运算符“” 。 前面已经提及右移运算时符号位的处理问题,是针对有符号数的情况。当数是无符号数时,右移后在左边空出的位上填充0,称为无符号右移位。对应的运算符是“” 。,其它运算符,条件运算符 、new运算符 、void运算符 、类型检测运算符 、对象属性存取运算符 、数组存取运算符 、delete运算符、 this运算符 等等。 条件运算符 ,可以根据条件在两个语句间选择一个来执行。使用符号“?:”,属于三目运算符,语法如下:条件表达式 ? 语句1:语句2如果语句1为真,则执行语句1,否则则执行
40、语句2。 new运算符,它是创建对象的一种方式。可以直接使用new运算符创建一个类的实例对象 。 void运算符是用在表达式不需要返回值时,可以使用void运算符来避免表达式返回值 。 通过使用typeof运算符即可获得数据的类型名。typeof返回一个表达式的值的类型名 。,其它运算符,对象属性存取运算符 ,用符号“.”表示。其作用是读取对象的属性、或保存值到对象的属性、或调用对象的方法。 数组存取运算符 ,JavaScript提供“”运算符用于存取数组元素,方括号中是要存取的元素的下标。这个运算符大大方便了数组的编程 。 delete运算符,它可以删除对象的一个属性或数组的一个元素,Jav
41、aScript对象的属性可以动态添加。对于动态添加的属性可以用delete运算符将其删除 。 this运算符 ,“this”严格的说是一个关键字,也可以理解为运算符。面向对象的编程中要引用当前对象,this运算符可以返回当前对象的引用。this通常用在对象构造函数中,用来引用函数对象本身。 下面来看一个例子。,运算符的优先级,运算符的优先级 JavaScript中的运算符优先级是一套规则。该规则在计算表达式时控制运算符执行的顺序。具有较高优先级的运算符先于较低优先级的运算符得到执行。同等级的运算符按左到右的顺序进行 ,下面这个表把运算符的优先级从高到低进行了归纳。,运算符的优先级,第五讲:控制
42、语句,课程内容安排,JS控制语句概述 选择语句 if语句 、if-else语句 、if-else-if语句、switch语句 循环语句 for语句 、while语句 、do-while语句 、for-in语句、break和continue语句 异常处理语句 try-catch语句 、try-catch-finally语句 、throw语句,JS控制语句概述,JavaScript中提供了多种用于程序流程控制的语句,这些语句分为选择和循环两大类 选择语句是指根据条件来选择一个任务分支的语句统称,实现分支程序设计 switch实现多路选择功能,在给定的多个选择中选择一个符合条件的分支来执行 在编程中
43、有些指令需要重复执行很多遍,这就要编写大量的代码。而计算机则是专门用来快速完成重复和繁琐的工作,因此编程语言也就提供循环语句来减少重复指令的编写,if语句,if语句 生活中一个形象的例子,某人在看钟表上的时间,如果小于凌晨6点就决定继续睡,如果大于6点,就起床去上班 。编程中也有类似的问题,此时可用if语句来描述之,其测试一个Boolean表达式,结果为真则执行某段程序。,if( ) / 条件语句 语句组 ; / 程序语句序列 ,if-else语句,if-else语句 if语句仅根据表达式的值决定是否执行某个任务,没有其它更多的选择,而if-else语句则提供双路选择功能。,if ( ) /
44、表达式成立时 语句组1; / 有效的程序语句 else / 表达式不成立时 语句组2; / 有效的程序语句 ,if-else-if语句,if-else-if语句 当有多个可供判断选择的条件时,单个if-else语句显然不能表达,于是有了if-else-if语句。严格的说if-else-if不是单独的语句,而是由多个if-else组合而成,实现多路判断,if( ) 语句组1; else if( ) 语句组2; else 语句组3; ,switch语句,switch语句 用if-else语句实现多路选择结构使程序看起来不清晰,也不容易维护,于是可以选择switch语句代替之。switch实现多路选
45、功能,在给定的多个选择中选择一个符合条件的分支来执行。,switch ( ) case : 语句组1; case : 语句组2; default: 语句组3; ,循环语句,在编程中有些指令需要执行很多遍,这就要编写大量的代码。而计算机则是专门用来快速完成重复和繁琐的工作,因此编程语言也就提供循环语句来减少重复指令的编写 将重复执行的动作放在循环语句中,计算机将根据条件执行之。 JavaScript的循环语句包括:for、while、do-while、for-in等4种,for语句,遇到重得执行指定次数的代码时,使用for循环比较合适 在执行for循环执行体中的语句前,有三个语句将得到执行,这三
46、个语句的运行结果将决定是否要进入for循环体,for( 表达式1; 表达式2 ; 表达式3 ) 语句组; ,while语句,while循环在执行循环体前测试一个条件,如果条件成立则进入循环体,否则跳到循环后的第一条语句。 一些重复执行动作的情形比较简单时就不需要用for循环,可以使用while循环代替,while( 条件表达式 ) 语句组; ,do-while语句,do-while语句先执行一遍循环体,循环体内的语句执行之后再测试一个条件表达式 。 如果表达式成立则继续执行下一轮循环,否则跳到do-while代码段后的第一条语句。,do 语句组; while( 条件表达式 );,for-in语
47、句,for-in语句是for语句的一个变体,同样是for循环语句 for-in通常用于遍历某个集合的每个元素,比如数组由很多元素,其元素索引构成了一个集合,使用for-in语句可以遍历该集合,进而取得所有元素数据 。,for ( n in set) 语句组; ,break语句将无条件跳出并结束当前的循环结构,continue语句的作用是忽略其后的语句并结束此轮循环和开始新的一轮循环,异常处理语句,程序运行过程中难免会出错,出错后的运行结果往往是不正确的,因此运行时出错的程序通常被强制中止。运行时的错误统称为异常 try-catch try-catch-finally throw,为了能在错误发
48、生时得到一个处理的机会,JavaScript提供了异常处理语句,try-catch语句,try-catch是一个异常捕捉和处理代码结构,当try块中的代码发生异常时,将由catch块捕捉以及处理。,try tryStatements catch(exception) catchStatements ,try-catch-finally语句,try-catch-finally语句作用与try-catch语句一样,唯一的区别就是当所有过程执行完毕之后前者的finally块无条件被执行 throw语句 当多个结构嵌套时,处于里层try-catch语句不打算自己处理异常则可以将其抛出,父级try-catch语句可以接收到子级抛出的异常。,