第三讲 JavaScript的基本语法    
 
  主要内容:
  1.JavaScript的数据类型
  2.JavaScript的变量
  3.表达式和运算符
  4.JavaScript的数组的创建及使用,简单介绍二维数组

  3.1 JavaScript的数据类型
  JavaScript提供的最简单的几个基本类型:
  字符串(String)
  数字(Number)
  布尔值(Boolean)
  1.字符串
  字符串是由一连串的字符组成的序列,它可以包含字母、数字以及标点符号,当然中文环境下还可以包含汉字。字符串通常用于表示文本信息。
  在JavaScript中,字符串可以通过在其首尾添加成对的双引号或者单引号被包含进来。例如,"这是第一个JavaScript例子"、 "欢迎进入JavaScript世界"等等都是字符串。
  注意使用字符串的两种特殊情况:
  (1)如果单引号本身属于字符串,则字符串的首尾要加双引号;如果双引号本身属于字符串,则字符串的首尾要加单引号。例如,"I'm a student! "
  (2)字符串不包含任何字符时称为空字符串,空字符串是用一对引号括起来的(不含空格),例如""或''。
  特殊控制字符
  在JavaScript中,还提供了一些以反斜杠(\)开头的不可显示的特殊控制字符,可以用来在字符串中添加格式或者防止某些字符引起错误。这些字符前的"\"叫做转义字符。
  在JavaScript中可以使用的这些特殊字符:
  \b:表示退格
  \f:表示换页
  \n:表示换行
  \t:表示Tab符号
  \r:表示回车符
  \':表示单引号本身
  \":表示双引号本身
  \t:水平制表符
  \\:反斜线
  这些特殊字符可以放在字符串中的任何位置上,而且其前后不需要空格。
  例如
  document.write("马丽今年"+19+"岁,\n")
  document.write("她的英文名字是\'shanney"+"\'.")
  2.数字
  JavaScript为了支持各种算术运算提供了两种类型的数字:整型数字和浮点型数字。
  整型数字,简称为整数,包括正整数、负整数和0,例如200、-54。
  浮点型数字,简称为实数,由整数部分和小数部分组成,例如1.25、-0.00025。
  当实数很大或很小时,可以用科学记数法表示:用字母E(或e)表示底10。
  例如,12500,用科学记数法可以表示为1.25e4
  -0.00025,用科学记数法可以表示为-2.5e-4
  NaN(非数字):NaN是Not a Number的缩写,即"不是一个数字",当在程序中由于某种原因使运算后产生的结果是一个没有意义的数学操作时,则JavaScript用NaN表示这个无意义的结果。
  3.布尔值
  布尔值也就是逻辑型的值,它只有两个值:true(真)和false(假),在计算机中布尔值经常用来表示结果具有两种可能(如成立或不成立)的情况。
  计算机内部实际上是用1表示true,用0表示false,所以当布尔型的值与数字型的值一起运算时,计算机会自动将true和false转换为1和0后再运算。
  4.空值
  空值就是null,它不表示任何东西,只是在某些时候用到,例如可用来为变量提供初值。
  5.未定义值
  在网页上看到的undefined,表示是未定义值。未定义值比较难理解,在有些情况下它等同于null,但有时也是告诉用户JavaScript出了一些问题,例如使用了未定义的变量。
  
  3.2 JavaScript的变量
  1.什么是变量?
  简单地说,变量对应计算机内存中的某个单元。为了使计算机处理数据,应先将数据放入内存中。要先根据要保存的数据类型,声明属于这种类型的变量,计算机就会根据数据的类型分配相应的内存单元。变量的所属类型决定了这个变量对应的内存的大小和保存的数据的类型。通过该变量,就可以将数据保存到内存中或从内存中取出数据了。
  2.变量名命名规则
  变量名是变量的名称。用户是通过变量名来使计算机操作变量的。
  给变量取名时要注意以下几点:
  (1)变量名必须以字母或下划线("_")开始,接下来可以是数字0~9、字母A~Z或a~z、下划线("_")。
  (2)变量名不能使用空格、(+)、(-)、(,)等其它符号。
  (3)不能使用JavaScript中的保留字作为变量名。
  (4)JavaScript的变量名是区分大小写的。例如str与Str分别代表两个不同的变量。
  例如,_h1、today1、TODAY1等是合法变量
  var、1today、the student等是非法变量
  JavaScript的保留字
  保留字又称为关键字,是JavaScript中已经被赋予了特定意义的一些单词。
  例如,var,代表声明变量;if,代表if条件语句。
  以下就是JavaScript的主要的保留字:
  abstract,boolean,Break,byte,case,catch,char,class,const,continue,default,do,double,else,extends,false,final,finally,float,for,function,goto,if,implements,import,in,instanceof,int,interface,longnative,new,null,ackage,private,rotected,public,return,short,static,super,switch,synchronized,this,throw,throws,transient,true,try,var,void,while,with
  3.变量声明和使用变量
  在JavaScript中,变量可以在使用前进行声明,也可以不声明直接使用。
  可以简单地使用var加上为变量指定的名称来声明变量,而变量的类型可以通过给变量赋值时由所赋值的类型确定。这样做就是告诉JavaScript解释器当前有一个变量,在程序中已经得到了初值。
  例如,var name; //声明变量name
  var age; //声明变量age
  name='李小一'; //给变量name赋值
  age=22; //给变量age赋值
  在声明多个变量时,可以写成一行,变量名间用逗号分隔。
  例如,var name,age;
  name='李小一'; age=22;
  还可以将变量声明和赋值放在一行中完成,赋值语句间用逗号分隔。
  例如,var name='李小一', age=22;
  也可以不使用var事先进行声明,而是直接给变量赋值,赋值语句间用分号分隔。
  例如,name='李小一'; age=22; (语句写在一行时,要加分号)
  一行既可以只书写一条语句也可以书写多条。若一行只有一条语句,则可以加分号也可以不加分号。但是若一行有多条语句,则语句间必须要用分号隔开。
  注意:
  一个变量如果只是声明了,但是并没有给它赋初值,这样的变量的确是存在的,但是是处于未确定类型状态,JavaScript将其归为undefined类型。如果直接使用这个变量,由于它没有值(类型未确定)有时会导致程序错误。
  既不赋值,也不进行声明就直接使用一个变量,会导致运行错误,因为JavaScript不知道忽然出现的变量是什么类型,从而没有办法正确处理。
  4.变量类型转换
  JavaScript采用弱类型的形式,对数据类型要求不太严格。在JavaScript中一个变量的数据类型是通过在使用或赋值时确定的。在程序执行的过程中,JavaScript会根据需要自动地进行一些必要的类型转换工作。
  有时为了程序的需要,JavaScript允许在程序中改变变量的类型。有两个十分常用的类型转换符Number和String。Number(x) 是将字符型值转换为数字型值,而String(x)则是将数字型值转换为字符型值。相对于JavaScript的自动类型转换,可以将这种转换称为强制类型转换。
  例如,计算长方形的面积和周长
  side1="10"; side2=15;
  circle=Number(side1)+side2;
  area=side1*side2
  注意:尽量避免在程序中不断改变变量的类型,因为这会使程序难于阅读和理解。
  
  3.3 JavaScript的表达式和运算符
  1.JavaScript的表达式
  表达式是使用各种运算符号将两个数据或多个数据结合起来,生成一个新的值。
  例如
  side1="10";side2=15;
  area=side1*side2;
  circle=Number(side1)+side2;
  2.JavaScript的运算符
  表达式是利用运算符来连接数据的,以运算符为基础。运算符是完成操作的一系列符号,它必须作用在数据上才有效。JavaScript提供的常用运算符包括算术运算符、逻辑运算符、字符串运算符以及赋值运算符等。
  n 算术运算符
  JavaScript中的算术运算符包括:
  +(加) 、-(减)、 *(乘)、 /(除)、 %(取模运算) 、++(增量运算)、--(减量运算)和-(取反运算)。
  (1)+、-、*、/ 运算符符合日常的数学运算规则。
  (2)取模运算符%
  这个运算符也可以称为取余运算符,其两边的运算数的类型与(1)中的一样必须是数字型的。A%B的结果是数A被数B除后得到的余数。例如,11%2=1。
  以上运算符都是作用在两个数据上的,在JavaScript中,只作用于一个数据的运算符被称为单目运算符;作用于两个数据上的运算符称为双目运算符;作用于3个数据上的运算符称为三目运算符。
  使用这些运算符时一定要特别小心,如果不注意,有可能会出现NaN或者其它错误的结果。例如,如果除数为0,就会出现问题。
  (3)增量运算++、减量运算--
  这两种运算符都是单目运算符,它们可以代替变量x进行x=x+1和x=x-1两种操作,但是该运算符是前置于变量还是后置于变量所得到的结果是不同的。
  将运算符前置于变量的操作(++x,--x)是先对变量进行增加或减少,然后再在表达式中进行计算。
  例如:
  如果x=5,则++x+4=10
  如果x=5,--x+4=8
  将运算符后置于变量的操作(x++,x--)是先将变量的值在表达式中参加运算后,再将变量进行增加或减少。例如:
  如果x=5,则x+++4=9
  如果x=5,则x--+4=9
  建议尽量避免使用这种容易混淆的表达式。例如x=5;y=++x+4,就直接写成x=5;x=x+1;y=x+4。
  (4)取反运算-
  取反运算的作用就是将值的符号变成反的。例如,正号变为负号,反之亦然。
  例如,x=5,则-x=-5。
  n 比较运算符
  比较运算符是双目运算符,用于对两个数据进行比较,然后再返回一个true或false。JavaScript有6个比较运算符:
  <(小于)、>(大于)、<=(小于等于)、>=(大于等于)、==(等于)、!=(不等于)。
  例如,4<6=true
  10>12=false
  注意:
  进行比较的两个数据一定要是同类型的。如果类型不相同,JavaScript会试图转换为同一种类型,但是这种转换有时并不一定能成功。所以为了减少出错的机会,提倡尽量避免将不同类型的数据做比较。
  n 逻辑运算符
  JavaScript中的逻辑运算符包括:
  逻辑与运算符&&
  A&&B中,只有当两个数据A和B的值都是true时,整个表达式的值才能为true。例如,true&&false-->false。
  逻辑或运算符||
  A||B中,只要两个数据A和B中的其中一个的值是true,整个表达式的值就为true。例如,true||false-->true逻辑非运算符! !A中,当数据A的值为true时,则表达式的值为false,当A的值为false时,表达式的值为true。例如,!(3>5)-->true
  注意,此处的A和B是逻辑值。
  n 字符串运算符
  字符串运算符只有字符串连接运算符+,是双目运算符。在JavaScript中,可以使用字符串连接运算符将两个字符串连接起来成为一个新的字符串。
  例如,表达式"my"+"document"的运算结果为一个新的字符串"my document"。
  n 赋值运算符
  赋值运算符(=)的作用是将它右边的表达式计算出来的值复制给左边的变量。
  例如,x=5+1 其结果是把赋值号右边的表达式5+1的值6复制给左边的变量x,这样,x的值就是6。
  赋值运算符还可以用来给多个变量指定同一个值,例如,x=y=z=1,变量x,y和z的值都是1。
  还可以在赋值运算符(=)之前加上其他的运算符构成复合赋值运算符。
  下面列出一些复合赋值运算符的例子:
  x+=y , 等同于x=x+y;
  x-=y, 等同于x=x-y;
  x*=y , 等同于x=x*y;
  x/=y , 等同于x=x/y;
  x%=y , 等同于x=x%y。
  n 条件运算符
  条件运算符(?:)是三目运算符。条件运算符的格式是:条件表达式? A:B,其工作原理是:如果条件表达式的值为真,则整个表达式的值就是A,否则整个表达式的值就是B。
  例如,status=(age>=18)?"adult":"child";
  这个表达式首先判断变量age的值是否大于或等于18,如果大于或等于18,则表达式的值就是adult,那么status的值就等于adult;如果小于18,则表达式的值是child,那么status的值就等于child。
  n typeof()运算符
  用来返回一个变量或者数据的类型。
  返回number,表明数据是数字型的;
  返回string,表明数据是字符串型的;
  返回boolean,表明数据是布尔值;
  返回function,表明数据是函数或对象;
  返回undefined,表明变量是未定义的;
  返回object,表明变量是null。
  例如,typeof('abc')的结果是string,而typeof(123)的结果是number。
  3.运算符的优先级
  当一个表达式中包含多种运算符时,是按照运算符的优先级来计算表达式的。在JavaScript中,运算符的优先级从高到低依次排列为:
  函数调用、括号:( )、[ ]
  取反、增量、减量:!、-、++、--
  乘、除、取模:*、/、%
  加、减:+、-
  比较运算符:<、<=、>、>=
  等于、不等于:==、!=
  逻辑与:&&
  逻辑或:||
  条件:?:
  赋值:=、+=、-=、*=、/=、%=
  在计算一个表达式时,高优先级的运算符比低优先级的运算符先进行计算。
  例如,计算表达式!(3==5)||5!=5&&true的步骤:
  计算(3==5),得到false
  计算!(3==5),得到true
  计算5!=5,得到false
  计算5!=5&&true,得到false
  计算!(3==5)||5!=5&&true,相当于true||false,得到true
  
  3.4 JavaScript中的数组
  1.数组
  数组代表内存中一串连续的空间(单元),可以将多个值按一定排列顺序存放在数组中。
  创建数组
  格式:数组变量名=new Array()。
  使用数组时,在数组变量名后面加上该数组单元在数组中的位置(下标)即可。
  例如week=new Array(3)
  有3个数组单元week[0]、week[1]、week[2]。注意,在week变量名后记录数组单元位置使用的是方括号[]。 JavaScript对数组单元进行记数时,从0开始。因此数组week的单元编号是0到2。
  在创建数组时,如果不在new Array()括号内指定数组单元的个数(即数组的长度),则在具体为数组单元赋值时,JavaScript会自动延伸数组的长度。
  例子3-1:
  <HTML>
  <HEAD>
  <TITLE>编写JavaScript脚本</TITLE>
  <SCRIPT Language ="JavaScript" >
  var week=new Array(); //创建数组,不指定数组长度
  week[4]= "Thursday"; //将数组的4号单元赋值为Thursday
  week[6]= "Saturday"; //将数组的6号单元赋值为Saturday
  document.write("整个数组的单元值是:"+week+ "<BR>"); //输出数组的4号单元
  document.write("week[6]="+week[6]);//输出数组的6号单元
  </SCRIPT>
  </HEAD>
  </HTML>
  快速创建数组
  可以在创建数组时直接将值放到new Array()的括号中,即直接对数组单元赋值。数组的单元个数(数组长度)由JavaScript根据赋值的情况自动分配。
  例如,week=new Array("Sunday", "Monday", "Tuesday")
  还可以直接使用[ ]创建数组。
  例如:week= ["Sunday", "Monday", "Tuesday"]
  与week=new Array("Sunday", "Monday", "Tuesday")是等效的。
  当new Array()括号内只有一个值时,如果这个值是整数,则是用来定义数组长度的,例如new Array(6);如果这个值不是整数,则作为赋给第1个数组单元的初值,例如new Array("Sunday")。
  数组的长度
  数组的长度是指数组中所包含的数组单元的个数,可通过 数组名.length获得数组的长度。
  例如,week.length-->3
  数组中的单元值不一定是同种类型的数据,甚至可以是又一种数组,这样就形成了多维数组。
  2.二维数组
  当数组中的所有单元值都只是基本类型的值时就称这种数组为一维数组。当数组中的单元值是又一种数组时,就形成了二维(2D)数组。
  例如
  anotherArray=new Array('one','two','three') //anotherArray是一维数组
  myArray=new Array(1,2,anotherArray) // myArray是二维数组
  数组单元值:
  myArray[0]=1
  myArray[1]=2
  myArray[2][0]='one'
  myArray[2][1]='two'
  myArray[2][2]='three'
  例子3-2:
  <HTML>
  <HEAD>
  <TITLE>编写JavaScript脚本</TITLE>
  <SCRIPT Language ="JavaScript" >
  var student=new Array(5); //创建数组
  student[0]=new Array("李 林 ","男 ",20," 数学"); //创建数组并给数组赋值
  student[1]=new Array("王小雪 ","女 ",19," 英语");
  student[2]=new Array("周 明 ","男 ",19," 英语");
  student[3]=new Array("李 涛 ","男 ",20," 数学");
  student[4]=new Array("赵清清 ","女 ",20," 数学");
  document.write("学生的姓名、性别、年龄、所学专业现列举如下:"+"<P>");
  for(i=0;i<=4;i++) //使用for循环嵌套语句输出数组的值
  {
  for(j=0;j<=3;j++)
  {
  document.write(" "+student[i][j]); //输出二维数组中的每个单元的值
  }
  document.write("<P>")
  }
  </SCRIPT>
  </HEAD>
  </HTML>
  小结:
  这一讲主要介绍了JavaScript的数据类型、变量的使用、表达式和运算符以及JavaScript的数组。
  练习:
  1.编写脚本,创建两个变量,分别为它们赋予字符串值和数字值,并在页面上输出;再创建多个变量,并同时给这些变量赋值,在页面上输出。
  2.设c1="10",c2="12",c1+c2的值是多少?Number(c1)+Number(c2)的值是多少?编写脚本验证结果。
  3.熟悉所介绍的各种JavaScript运算符。编写脚本,用运算符和表达式创建一些简单的JavaScript脚本,并在页面上输出。
  4.表达式(2*5!=2*5)||(13%5==3)&&!(6<=8)的结果是什么?注意各运算符的优先级。
  5.将赤、橙、黄、绿、青、蓝、紫这七种颜色存入一个数组中,并在页面上输出。
  6.编写脚本,创建一个二维数组,将你们小组8个同学的姓名和期末成绩存储,在页面上进行输出。