第2章JavaScript语言基础JavaScript脚本语言作为一门功能强大、使用范围较广的程序语言,其语言基础包括数据类型、变量、运算符、函数以及核心语句等内容。本章主要介绍JavaScript脚本语言的基础知识,带领读者初步领会JavaScript脚本语言的精妙之处,并为后续章节的深入学习打下坚实的基础。本章涉及到对象的相关知识,在本书后续章节将对其进行适当的分类和详细的论述,如读者理解有困难,可自行跳过,待学习了对象的基本概念和相关知识后再进行深入理解。2.1编程准备在正式介绍Javascript脚本语言之前,先介绍使用JavaScript脚本进行编程需要首先了解的知识,包括编程术语、大小写敏感性、空白字符以及分号等内容,以及脚本编程过程中需遵守的一些约定,以编写合法的JavaScript脚本程序。2.1.1编程术语首先我们来学习一下Javascript程序语言的基本术语,这些术语将贯穿JavaScript脚本编程的每个阶段,汇总如表2.1所示:表2.1Javascript脚本编程基本术语项目简要说明举例Token(语言符号)Javascrip脚本语言中最小的词汇单元,是一个字符序列6,“Iamaboy”,所有的标识符和关键字Literal(常量)拥有固定值的表达式6,“Iamaboy”,[1,2,3]Identifer(标识符)变量、函数、对象等的名称num,alert,yourSexOperator(运算符)执行赋值、数学运算、比较等的符号=,+,%,Expression(表达式)标识符、运算符等组合起来的一个语句,返回该语句执行特定运算后的值x+1,(num+1)/5Statement(语句)达到某个特定目的的强制性命令,脚本程序由多个语句构成varnum=5;functionsum(x,y){result=x+y;return(result);}Keyword(关键字)作为脚本语言一部分的字符串,不能用作标识符使用if,for,var,functionReserved(保留字)有可能作为脚本语言一部分的字符串,但并不严格限制其不能作为标识符const,short,long2.1.2脚本执行顺序JavaScript脚本解释器将按照程序代码出现的顺序来解释程序语句,因此可以将函数定义和变量声明放在head和/head之间,此时与函数体相关的操作不会被立即执行。2.1.3大小写敏感JavaScript脚本程序对大小写敏感,相同的字母,大小写不同,代表的意义也不同,如变量名name、Name和NAME代表三个不同的变量名。在JavaScript脚本程序中,变量名、函数名、运算符、关键字、对象属性等都是对大小写敏感的。同时,所有的关键字、内建函数以及对象属性等的大小写都是固定的,甚至混合大小写,因此在编写JavaScript脚本程序时,要确保输入正确,否则不能达到编写程序的目的。2.1.4空白字符空__________白字符包括空格、制表符和换行符等,在编写脚本代码时占据一定的空间,但脚本被浏览器解释执行时无任何作用。脚本程序员经常使用空格作为空白字符,JavaScript脚本解释器是忽略任何多余空格的。考察如下赋值语句:s=s+5;以及代码:s=s+5;上述代码的运行结果相同,浏览器解释执行第一个赋值语句时忽略了其中的空格。值得注意的是,浏览器解释执行脚本代码时,并非语句中所有的空格均被忽略掉。考察如下变量声明:x=typeofy;x=typeofy;上面这两行代码代表的意义是不同的。第一行是将运算符typeof作用在变量y上,并将结果赋值给变量x;而第二行是直接将变量typeofy的值赋给了x,两行代码的意义完全不同。在编写JavaScript脚本代码时经常使用一些多余的空格来增强脚本代码的可读性,并有助于专业的JavaScript脚本程序员(或者非专业人员)查看代码结构,同时有利于脚本代码的日后维护。注意:在字符串中,空格不被忽略,而作为字符串的一部分显示出来,在编写JavaScript脚本代码时,经常需添加适当的空格使脚本代码层次明晰,方便相关人员查看和维护。2.1.5分号在编写脚本语句时,用分号作为当前语句的结束符,例如:varx=25;vary=16;varz=x+y;当然,也可将多个语句写在同一行中,例如:varx=25;vary=16;varz=x+y;值得注意的是,为养成良好的编程习惯,尽量不要将多个语句写在一行中,避免降低脚本代码的可读性。另外,语句分行后,作为语句结束符的分号可省略。例如可改写上述语句如下:varx=25vary=16varz=x+y代码运行结果相同,如将多个语句写在同一行中,则语句之间的分号不可省略。2.1.6块在定义函数时,使用大括号“{}”将函数体封装起来,例如:functionmuti(m,n){varresult=m*n;returnresult;}在使用循环语句时,使用大括号“{}”将循环体封装起来,例如:if(age18){alert(对不起,您的年龄小于18岁,您无权浏览此网页);}从本质上讲,使用大括号“{}”将某段代码封装起来后,构成“块”的概念,JavaScript脚本代码中的块,即为实现特定功能的多句(也可为空或一句)脚本代码构成的整体。2.2数值类型2.2.1整型和浮点数值JavaScript允许使用整数类型和浮点类型两种数值,其中整数类型包含正整数、0和负整数;而浮点数则可以是包含小数点的实数,也可以是用科学计数法表示的实数,例如:varage=32;//整数型varnum=32.18;//包含小数点的浮点型varnum=3.7E-2;//科学计数法表示的浮点型2.2.2八进制和十六进制在整数类型的数值中,数制可使用十进制、八进制以及十六进制,例如:varage=32;//十进制varnum=010;//八进制varnum=C33;//十六进制2.3变量几乎任何一种程序语言都会引入变量(variable),包括变量标识符、变量申明和变量作用域等内容。JavaScript脚本语言中也将涉及到变量,其主要作用是存取数据以及提供存放信息的容器。在实际脚本开发过程中,变量为开发者与脚本程序交互的主要工具。下面分别介绍变量标识符、变量申明和变量作用域等内容。2.3.1变量标识符与C++、Java等高级程序语言使用多个变量标识符不同,JavaScript脚本语言使用关键字var作为其唯一的变量标识符,其用法为在关键字var后面加上变量名。例如:varage;varMyData;2.3.2变量申明在JavaScript脚本语言中,声明变量的过程相当简单,例如通过下面的代码声明名为age的变量:varage;JavaScript脚本语言允许开发者不首先声明变量就直接使用,而在变量赋值时自动申明该变量。一般来说,为培养良好的编程习惯,同时为了使程序结构更加清晰易懂,建议在使用变量前对变量进行申明。变量赋值和变量声明可以同时进行,例如下面的代码声明名为age的变量,同时给该变量赋初值25:varage=25;当然,可在一句JavaScript脚本代码中同时声明两个以上的变量,例如:varage,name;同时初始化两个以上的变量也是允许的,例如:varage=35,name=“tom”;在编写JavaScript脚本代码时,养成良好的变量命名习惯相当重要。规范的变量命名,不仅有助于脚本代码的输入和阅读,也有助于脚本编程错误的排除。一般情况下,应尽量使用单词组合来描述变量的含义,并可在单词间添加下划线,或者第一个单词头字母小写而后续单词首字母大写。注意:JavaScript脚本语言中变量名的命名需遵循一定的规则,允许包含字母、数字、下划线和美元符号,而空格和标点符号都是不允许出现在变量名中,同时不允许出现中文变量名,且大小写敏感。2.3.3变量作用域要讨论变量的作用域,首先要清楚全局变量和局部变量的联系和区别:�全局变量:可以在脚本中的任何位置被调用,全局变量的作用域是当前文档中整个脚本区域。�局部变量:只能在此变量声明语句所属的函数内部使用,局部变量的作用域仅为该函数体。声明变量时,要根据编程的目的决定将变量声明为全局变量还是局部变量。一般而言,保存全局信息(如表格的原始大小、下拉框包含选项对应的字符串数组等)的变量需声明为全局变量,而保存临时信息(如待输出的格式字符串、数学运算中间变量等)的变量则声明为局部变量。考察如下代码://源程序2.1!DOCTYPEHTMLPUBLIC-//W3C//DTDHTML4.0//EN=Content-Typecontent=text/html;charset=gb2312titleSamplePage!/titlescriptlanguage=JavaScripttype=text/javascript!--vartotal=100;functionadd(num){vartotal=2*num;alert(\n局部变量:\n\ntotal=+total+\n);returntrue;}--/script/headbodyonload=add(total)centerforminputtype=buttonvalue=局部和全局变量测试onclick=javascript:alert('\n全局变量:\n\ntotal='+total+'\n');/form/center/body/html浏览器载入上述代码后,弹出警告框显示局部变量total的值,其结果如图2.1所示。图2.1局部变量在上述警告框中单击“确定”后,关闭该警告框。单击“局部和全局变量测试”按钮,弹出警告框显示全局变量total的值,如图2.2所示。图2.2全局变量代码载入后,add(num)函数响应body元素对象的onload事件处理程序,输出其函数体中定义的局部变量total的值(整数200)。单击“局部和全局变量测试”按钮,触发其onclick事件处理程序运行与其关联的JavaScript代码输出全局变量total的值(整数100):javascript:alert('\n全局变量:\n\ntotal='+total+'\n');由上述结果可以看出,全局变量可作用在当前文档的JavaScript脚本区域,而局部变量仅存在于其所属的函数体内。实际应用中,应根据全局变量和局部变量的作用范围恰当定义变量,并尽量避免全局变量与局部变量同名,否则容易出现不易发现的变量调用错误。同时注意应对代码中引入的任何变量均进行声明。2.4弱类型JavaScript脚本语言像其他程序语言一样,其变量都有数据类型,具体数据类型将在下一节中介绍。高级程序语言如C++、Java等为强类型语言,与此不同的是,JavaScript脚本语言是弱类型语言,在变量声明时不需显式地指定其数据类型,变量的数据类型将根据变量的具体内容推导出来,且根据变量内容的改变而自动更改,而强类型语在变量声明时必须显式地指定其数据类型。变量声明时不需显式指定其数据类型既是JavaScript脚本语言的优点也是缺点,优点是编写脚本代码时不需要指明数据类型,使变量声明过程简单明了;缺点就是有可能造成因微妙的拼写不当而引起致命的错误。考察如下代码://源程序2.2!DOCTYPEHTMLPUBLIC-//W3C//DTDHTML4.0//EN=Content-Typecontent=text/html;charset=gb2312titleSamplePage!/titlescriptlanguage=JavaScripttype=text/jav