《HTML教程》-4.3-4.4教学材料_第1页
《HTML教程》-4.3-4.4教学材料_第2页
《HTML教程》-4.3-4.4教学材料_第3页
《HTML教程》-4.3-4.4教学材料_第4页
《HTML教程》-4.3-4.4教学材料_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

4.3.1数值型

JavaScript和其他语言不同,它不区分数值是整型还是浮点型,而统统以64位的浮点数进行表示,表示范围为-1.7976931348623157×10308~-5×10-324和5×10-324~1.7976931348623157×10308,整数表示范围为-253~253。但需要说明的是,在JS中操作整数,如数组下标和位操作都是以32位形式的整数执行的。此外,JavaScript还支持以下数值类型:Infinity//无穷大//Number为JavaScript对象,POSITIVE_INFINITY表示正无穷大,只读属性Number.POSITIVE_INFINITY//负无穷大,只读属性Number.NEGATIVE_INFINITYNumber.MAX_VALUE//最大值NaN或者Number.NaN//非数值由于四舍五入的不精确性,JavaScript可以精确表示1/2,1/4,1/1024,但不能精确表示1/10,1/100和1/1000这样的数值[19],例如x=0.3–0.2;x==0.1//错误y=0.2–0.1;y==0.1//正确对类似这样的比较操作,要特别小心。4.3.2文本类型JavaScript以字符串表示文本类型。JavaScript字符串是以双引号(”)或单引号(’)括起来的一系列Unicode字符。字符串中字符的个数为字符串的长度。表示字符和Java编程语言不同,单引号和双引号都表示字符串,而不是单引号表示字符,而双引号表示字符串。JS中的字符串如下:“”//空串,即长度为0“HelloWorld”“3.14”“Hesaysit’svery‘important’”//引号的嵌套或者‘Hesaysit’svery“important”’//与上一句是等同的如果字符串中要包含单引号或者双引号(即单引号或双引号作为字符串的内容,而不是分隔符)就需要用到转义字符,转义字符以反斜线(\)开头。JavaScript中的转义字符如表4-1所示。表4-1JavaScript中的转义字符转义字符说明转义字符说明\0NUL字符(\u0000)\b退格(\u0008)\t水平制表符(\u0009)\n换行符(\u000A)\v垂直制表符(\u000B)\f换页符(\u000C)\r回车符(u000D)\”双引号(\u0022)\’单引号(\u00247)\\反斜线(\u005C)\xhh两位十六进制数表示的字符\xhhhh四位十六进制数表示的Unicode字符4.3.3布尔型、null和undefined

布尔值表示只有两种可能值的情况,比如是或否,真与假等。JS中以true表示真,false表示假。null是JS中的关键字,对于数值、字符串和对象表示其值不存在。undefined是JS定义的全局变量,与null不同。它可以表示:◆变量未初始化时的值;

◆对象不存在的属性的值;

◆数组不存在的元素的值;

◆未定义返回值的函数的返回值;

◆未提供实际参数的形参值。null和undefined用相等运算符(==)比较是相等的,但它们之间的区别是

:undefined表示系统级的,不可预料的,或者错误引起的值不存在;而null表示程序级的,正常的或可预料的值不存在[19]。虽然二者存在着一定的差异,但通常情况下二者可以通用。如果给变量或属性赋值,或者作为参数传递给调用函数,最好使用null。4.3.4全局对象

全局对象定义了JavaScript程序可用的符号,在JavaScript解释器启动,或者浏览器加载新的页面完成时创建,包含以下重要内容:

◆全局属性——如,undefined、Infinity和NaN等;

◆全局函数——如,isNaN()、parseInt()和eval()等;

◆构造函数——如,Date()、RegExp()、String()、Object和Array()等。

◆全局对象——如,Math和JSON等。全局对象中定义的属性、函数、构造函数和对象都可以直接使用,无须事先定义。JavaScript的全局对象与Java的lang包的作用和地位类似。如果你没有学习过Java就没必要为这个lang包是什么而大伤脑筋了。4.3.5类型转换

1、自动类型转换

JavaScript类型的十分灵活,各种类型之间可以相互转换。如:‘7’*‘4’//值为28,把字符串’7’和’4’转换成数字1–‘x’//结果为NaN,因为字符串’x’无法转换成数字等等。此类转换无需程序员进行干预,JS自动进行转换,这种类型转换称之为“自动类型转换”,各种类型之间的自动转换如表4-2[19]所示。*说明:function(){}可以定义函数,也可以看作定义对象。对于对象(含数组和函数)不推荐使用自动类型转换,而应根据实际需要编写相应的代码。2、强制类型转换

(1)把数字转换成字符串

如果自动类型转换不能满足需要怎么办?JavsScript还提供了强制类型转换的机制。数字转换成字符串有两种方法:●加上一个空的字符串,如123+“”(这里的+号表示连接符,连结左右两个操作数,而不加号),结果就是字符串”123”。

●调用toString()方法,如123.toString(),结果就是字符串”123”。(2)把字符串转换成数字

●把字符串转换成数字也有两种方法:减去0的方法,如”123”–0,结果就是数字123。

●调用parseInt()和parseFloat()方法。其中,parseInt()只能处理整数,parseFloat()即可处理整数,也可处理浮点数。如parseInt(“123”),结果就是整数123,parseFloat(“123.01”),结果就是数值123.01。4.3.6数据类型的性质

对于原始类型的数据(undefined,null,布尔类型,数值和字符串),它们的值是不可改变的,而对于对象类型则不同,它们是可以改变的。如s=“hello”;s.toUpperCase();只是toUpperCase()函数的返回值变成了大写,而字符串s本身没有任何改变,仍然是原来的”hello”。toUpperCase()是String对象的一个方法,用于把一个字符串全部转换成大写字母。在后续章节中我们会继续讨论String对象的常用方法。而对于对象类型(见5.1节)则会发生变化:o={name:‘cheng’}=‘xiao’;//name属性已经变为xiao,而不是原来的cheng了。o.gender=‘male’;//对象o中已经多了一个gender属性,而不仅仅只有name属性了这两点性质对于编程来说至关重要,必须掌握。以上两点说明的程序代码如清单4-2所示。清单4-2数据类型的性质演示s="hello";document.write("s全部转换成大写字母后:"+s.toUpperCase()+"<br/>");document.write("原来的s仍然为:"+s+"<br/>");o={name:'cheng'};document.write("对象o只有name属性,其值为"++"<br/>");document.write("对象o的gender属性,其值为"+o.gender+"<br/>");="xiao";document.write("修改了对象o的name属性,修改后的值为"++"<br/>");o.gender='male';document.write("对象o添加了gender属性,其值为"+o.gender+"<br/>");以上代码带有自说明性,只要根据输出的说明,就可以理解数据类型的两点性质。document是JavaScript的内置对象,可以直接使用,它表示当前网页中的文档。write()方法用于在文档(网页)中输出指定的内容。其中双引号中的内容原样输出,不在双绰号中的为JS代码,解释器会计算它们的值并与字符串进行连接。运行结果如下所示:s全部转换成大写字母后:HELLO原来的s仍然为:hello对象o只有name属性,其值为cheng对象o的gender属性,其值为undefined修改了对象o的name属性,修改后的值为xiao对象o添加了gender属性,其值为male大家对照前面的说明与运行结果,仔细理解这两种数据的性质,对于JS实际编程是非常重要的。4.4变量

4.4.1变量声明变量是用于存放数据值的“仓库”,JavaScript的变量不区分类型,一律采用关键字var声明(最新的ECMAScript6引入了关键字let声明变量)。变量名必须是合法的JavaScript标识符(见4.2.3节)。也可以不用关键字var声明,直接使用变量名,此时变量作为全局变量使用。举例如下:vara,b;//声明变量a和bc;//声明全局变量cJavaScript变量可以存放任意类型的数据。示例如下:vard=12;console.log(“d=”+d);//输出12d=“HelloAjax”;console.log(“d=”+d);//输出HelloAjaxconsole表示JavaScript的控制台,可以作为输出结果的一种方式。这个控制台在浏览器中,不同的浏览器位置不同,调用的方法也不同。在Chrome浏览器中,打开方式如下:单击浏览器右上角的

图标,选择“更多工具”→“开发者工具”,选择“Console”选项卡。这里说的是Chrome浏览器的JavaScript控制台。运行上面的程序可以得到如下结果:由上面的程序对照运行结果,可以得到如下结论:◆变量由关键字var声明;

◆变量不区别类型可以存放任意类型的数据。如示例中的变量d,先存放整数12,然后再存放字符串HelloAjax。4.4.2变量的分类

JavaScript中变量分为两类,一类是局部变量,另一类是全局变量。局部变量只在声明的范围内有效,而全局变量对于所有的JavaScript程序都有效。1、全局变量的声明

在任何函数之外声明的变量为全局变量,如:varENTER_KEY=13;vartimer=null;另一种声明全局变量的方法是,不使用var关键字,这种情况下,不论该变量位于哪个函数内部,都是全局变量。如:functionabc(){//全局变量timertimer=setInterval(def);}这里的function是声明函数的关键字,JavaScript函数5.5节介绍。2、局部变量的声明

除以上两种情况之外的变量都是局部变量。也可以说是在函数中以var关键字声明的变量都是局部变量。4.4.3变量的作用域所谓作用域(也称之为可见性)是指定义变量的程序代码的区域。变量只在其作用域内有效,出了作用域则变量不可见,即不可访问。变量的作用域规则如下:◆全局变量对于所有应用程序有效;

◆局部变量只对声明它的区域有效

◆若局部变量的作用域内有重名的全局变量,则局部变量优于全局变量,即局部变量作用域内,同名的全局变量不可见。下面举例说明。代码如清单4-3所示代码的运行结果如下:这里需要说明的是清单4-3的输出结果在控制台中,并不在网页中,必须打开JS的控制台才能看到结果,网页是空白的。打开JS控制台的方法见4.5节起始部分。输出结果的右侧是该输出结果是源文件的哪条语句输出的,如Listing4-3.html:4,说明d=12是源文件中第4行的console.log()输出的。请注意这里的第4行是指源文件Listing4-3.html中的行号,并不是清单4-3中的行号。为了便于大家理解,下面列出清单中输出语句的执行顺序:console.log("d="+d);//输出12console.log("d="+d);//输出HelloAjax//输出变量b的值console.log("b="+b);然后是a函数中的三条输出语句:console.log("函数a的输出:d=%s",d);console.log("函数a的输出:b=%d,c=%i,d=%s",b,c,d);//在for循环体外输出变量i的值console.log("函数a的输出:i=%i",i);最后是b函数中的输出语句:console.log("函数b的输出:d=%s",d);其中用到了函数的定义和调用、for循环和break语句,这些知识后续介绍。至于为什么是这种顺序,这涉及到函数的定义和调用。如果实在不能明白,等学习完函数有关内容后就会明白了。代码已经进行了详细注释,阅读代码时请对照注释以加深理解。下面对代码中的要点说明如下:◆JS变量存储数据不区分类型,如vard=12;先存放整数12,然后再执行d=“HelloAjax”赋值语句存储字符串。◆全局变量的作用域是整个JS程序,并不局限于当前的js文件。如全局变量d也可以在函数b中输出它的值,尽管b函数没有声明变量d。

◆局部变量的作用域只局限于声明它的范围。如函数a中的变量c,只在a函数体内有效,a函数体外则不可见,如在a函数外用console.log("c=%d",c);输出变量c,则出现错误,因为变量c未定义。◆for循环体中的变量i,其作用域不限于for循环体,而是整个a函数,这与其他高级语言有所不同。所以在循环体外输出变量i的值,就是for循环退出时的i值。

◆局部变量与全部变量重名的情况下,局部变量优于全局变量。即在局部变量作用域内,全局变量不可见。如在a函数体内用vard="Anothervariabled";声明变量d,它与全局变量d重名,则在a函数体内可见的只有局部变量d,而不是全局变量d。在函数a内输出变量d的值为Anothervariabled,而不是全局变量的HelloAjax。◆JS变量的自动提前(Hoist)——JS变量的声明无论位置在哪里,都会把声明提前到作用域的最前面。如函数a中的以下两句代码:console.log("函数a的输出:d=%s",d);v

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论