JavaScript程序设计-第2章(语言语法-数据类型-运算符-控制语句)_第1页
JavaScript程序设计-第2章(语言语法-数据类型-运算符-控制语句)_第2页
JavaScript程序设计-第2章(语言语法-数据类型-运算符-控制语句)_第3页
JavaScript程序设计-第2章(语言语法-数据类型-运算符-控制语句)_第4页
JavaScript程序设计-第2章(语言语法-数据类型-运算符-控制语句)_第5页
已阅读5页,还剩55页未读 继续免费阅读

下载本文档

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

文档简介

JavaScript程序设计第二章:JavaScript基本概念王瑞内容语法关键字变量数据类型操作符控制语句函数语法ECMAScript第3版区分大小写:ECMAScript中的一切(变量、函数名操作符)都区分大小写。标识符:第一个字符必须是一个字母、“_”或“$”。其它字符可以是字母、“_”、“$”或数字。不能将关键字或保留字作为标识符。语法ECMAScript第3版注释//单行注释/*多行注释*/语句ECMAScript中的语句以一个分号结尾;如果省略分号,则由解析器确定语句的结尾。varsum=a+bvarsum=a+b;//推荐多条语句组成的语句块与C语言相同,使用“{}”:if(test){…………}关键字保留字变量ECMAScript的变量是松散类型的,也就是说可以保存任何类型的数据。变量仅仅是用于保存值的占位符。声明变量可使用var关键字(var关键字,声明的变量是该变量在作用域中的局部变量,不使用var创建的变量是全局变量)。varmessage;可以声明变量时,赋初值。varmessage=“success”;数据类型ECMAScript中有5种简单数据类型(基本数据类型):undefine、null、boolean、number、string。还有一种复杂数据类型:Object,Object本质上是由一组无序的名值对组成的。Undefined类型Undefined类型只有一个值,即undefined。在一变量没有初始化时,这个变量的值就是undefined。例:varmessage;alert(message==undefined);//true注:undefined值,是变量已声明,但没有初始化。不是未声明!!!Null类型Null类型是第二个只有一个值的数据类型,这个值就是null。从逻辑上看,null值表示一个空对象指针,而这也正是使用typeof检测null值时,返回“object”的原因。varcar=null;alert(typeofcar);//object注:如果定义一个变量准备用来保存对象,那么最好将该变量初始化为null而不是其它值。这样可以通过判断其值是否为null,得知变量是否已经引用了一个对象。实际上,undefined派生自null,因此ECMA-262规定对它们的相等性测试要返回“true”:alert(car==undefined);//trueBoolean类型该类型只有两个值true、false。注意boolean类型的字面值true、false是区分大小写的。True和False都不是boolean值。虽然boolean类型的字面值只有true、false。但是ECMAScript中所有类型的值都有与这两个boolean值等价的值。要将一个值转换为其对应的boolean值,可以调用转型函数Boolean()。隐式转换:varmsg=“ok”;

if(msg)……数据类型转换为true的值转换为false的值BooleantruefalseString任何非空字符串“”空字符串Number任何非零数字值0和NaNObject任何对象nullUndefinedn/a(notapplicable不适用)undefinedNumber类型可以表示整数和浮点数。数值可以用十进制、8进制和16进制来表示。但在计算时都被转换成十进制。Varnum=10;//10进制表示Varnumb=070;//用8进制表示的56Varnumb2=0XA;//用16进制表示的10浮点数包含小数点,并在小数点后面必须至少有一位数字,小数字前可以没有数字(不推荐)。由于保存浮点数需要的内存空间是整数的两倍,因此ECMAScript会不失时机的将浮点值转换为整型值。如:Varflo=1.0;Varflo1=1.;可以使用科学记数法表示数值:varnum=3e-2;//0.03Number类型采用IEEE754格式,浮点数的精度远不如整数。如0.1和0.2相加的结果不是0.3,而是0.30000000000000004。

Number类型数据范围最小数值保存在Number.MIN_VALUE中,在大多数浏览器中,这个值是5e-324;最大值在Number.MAX_VALUE中,值是1.7976931348623157e+308。如果计算的结果超出数值范围,那么这个数值将被自动转换成特殊的Infinity(Number.POSITIVE_INFINITY)值。如果这个值是负值,则地转换成-infinity(Number.NEGATIVE_INFINITY)。判断数值是否在范围内,可使用函数isFinite(数值):isFinite(33);//trueisFinite(Number.POSITIVE_INFINITY);//falseNumber类型NaN即非数值(NotaNumber),表示一个本来要返回数值的操作数未返回数值的情况(一种异常情况,这样就不会抛出错误了)。例如,在其他编程语言中,0除以0都会导致错误,从而停止代码执行。但在ECMAScript中,返回NaN。NaN有两个非同寻常的特点。首先,任何涉及NaN的操作都会返回NaN。其次,NaN与任何值都不等,包括NaN自身。isNaN(变量)函数,用以测试参数是否“不是数值”,不是数值时返回true。isNaN(NaN);//trueisNaN(10);//falseisNaN(“10”);//false(“10”可以转换为10)isNaN(“blue”);//true(不可以转换为数值)isNaN(true);//false(true可被转换为1)Number类型数值转换有3个函数可以实现把非数值转换为数值:Number()、parseInt()、parseFloat()。Number()函数转换规则:boolean:true->1,false->0Null:0Undefined:NaN字符串:内容是数值的转换为数值,其它转换为NaN。对象:调用对象的valueof(),如果是NaN,则调用toString()。例:Number(“china”);//NaNNumber(“”);//0Number(“00011”);//11Number(true);//1Number("0x9");//9Number类型parseInt()在转换字符串时,更多的是看其是否符合数值模式。它会忽略字符串前面的空格。如果第一个不是数字或负号,返回NaN。如果字符串前面是数字后面是其它字符,则取前面的数字。如果是以0开头,转换成8进制数,以0X开头解析为16进制数。parseInt(“123abc”);//123parseInt(“”);//NaNNumber(“”);//0parseInt(“0xA“);//0XAparseInt(22.5);//22parseInt(“070”);//070(8进制)56DparseInt(“70”);//70parseInt(,)函数还提供了第2个参数,用以确定要转换的数值进制。当指定进制时,被转换的16进制和8进制数,可以不要0X和0开头。parseInt(“0xFA”,16);//250parseInt(“FA”,16);//250parseInt(“FA”);//NaNparseInt(“10”,8);//8parseInt(“10”,10);//10Number类型parseFloat()从第一个字符开始解析,当遇到无效的字符或第二个小数点为止。始终忽略前导的0。但16进制的字符串始终会转换为0,只能解析10进制值。如果解析的数值没有小数点,则返回整数类型。parseFloat(“123abc”);//123parseFloat(“0xa”);//10parseFloat(“22.5”);//22.5parseFloat(“22.22.22”)://22.22parseFloat(“0908.5”);//908.5parseFloat(“3.14e5”);//314000String类型由16位Unicode字体组成的字符序列。可以由(“”)或(‘’)表示,但需成对使用。转义字符字符串长度Vartxt=“china”;Alert(txt.length);//5String类型转换为字符串数值、boolean、对象、字符串都有toString()方法。null和undefined没有toString()方法。一般情况下toString()方法没有参数,也可以通过参数,指定要转换的数值类型的进制。如varnum=10;Alert(num.toString(8));//12Alert(num.toString(16));//A注:在不知道要转换的值是否是null或undefined时,可使用String()方法。将任何类型转换为字符串。String(null);//返回“null”Varval;Alert(String(val));//返回”undefined”Object类型ECMAScript中的对象其实就是一组数据和功能的集合。对象可以通过new操作符后跟对象类型来创建。而创建Object类型的实例并为其添加属性和方法,就可以创建自定义对象。Varobj=newObject();Typeof操作符使用typeof操作符可以用来检测变量的数据类型。根据变量的数据类型返回下列字符串:Undefined:值未定义boolean:是boolean类型String:是字符串类型Number:是数值类型Object:是对象类型Function:是函数例:alert(typeof95)-----number操作符一元操作符ECMA-262描述了一组用于操作数值的操作符,包括算术操作符(加、减)、位操作符、关系操作符和相等操作符。一元操作符递增和递减操作符(++、--),可分为前置型和后置型。前置型在变量使用前先进行递增或递减操作,后置型在使用后再进行递增或递减操作。如:vara=10;a=a+++1;//11alert(a);//11a=++a+4;//16alert(a);//16a=1;++a;a++;=>a+1;操作符一元操作符递增和递减操作符(++、--)对于boolean值先将值false转换为0,再进行++、--操作。对于true转换为1,再进行++、--操作。varaa=false;alert(++aa);//1alert(++false);//错误varbb=true;alert(++bb);//2操作符一元操作符递增和递减操作符(++、--)对于字符串先将值转换为数值类型,再进行++、--操作。varaa=“china”;alert(++aa);//NaNvaraa=“123china”;alert(++aa);//NaNvaraa="123";alert(++aa);//124操作符一元操作符递增和递减操作符(++、--)对于Object类型先将值转换为数值类型(调用对象的valueOf方法如果为NaN,则调用对象的toSting()方法),再进行++、--操作。varo={valueOf:function(){return-1}};alert(++o);//0操作符一元操作符一元加\减操作符一元加操作符以一个(+)表示,不会对数值产生任何影响。减操作符以(-)表示,将值变成负数。以于非数值类型,会先像Number()转型函数一样对这个值进行转换。定义+操作结果-操作结果vars1=“01”+s1;1-s1-1Vars2=“1.1”+s21.1-s2-1.1Vars3=“z”+s3NaN-s3NaNVarb=false;+b0-b0Varf=1.1+f1.1-f-1.1Varv={valueOf:function(){return-1}};+v-1-v1操作符位操作符位操作符对于有符号整数,32位中的前31位用于表示整数的值。第32位表示数值的符号(符号位):0表示正数,1表示负数。负数使用2进制数的补码表示。按位非(~)执行按位非的运算就是返回数值的反码。将每一位上的0和1进行取反(0变成1,1变成0)。操作符位操作符按位与(&)按位与操作就是将两个2进制数的每一位对齐,然后按对应的位之间进行“与”操作。当两个位都是1时,返回1。其它返回0。操作符位操作符按位或(|)按位与操作就是将两个2进制数的每一位对齐,然后按对应的位之间进行“或”操作。当两个数对应的位只要有一个为1时,返回1(两个都为1时,也返回1)。两个都是0时,返回0。操作符位操作符按位异或(^)按位与操作就是将两个2进制数的每一位对齐,然后按对应的位之间进行“异或”操作。当两个数对应的位不同时为0或1(即不同)时,返回1。其它都返回0。操作符位操作符左移(<<)将2进制数向左移动指定的位数。每左移一位相当于该数值乘以2。操作符位操作符有符号的右移(>>)将2进制数向右移动指定的位数。但保留符号位(即正负号标记)。操作符位操作符无符号的右移(>>>)将2进制数向右移动指定的位数。不保留符号位,以0填充空位。对于正数没有影响。但负数会变为正数。操作符逻辑操作符逻辑操作符有“逻辑非(!)”、“逻辑或(||)”、“逻辑与(&&)”。操作符布尔操作符逻辑非(!)该操作符返回一个boolean值。逻辑非操作符将它的操作数转换为一个boolean值,然后进行求反。操作数转换后的boolean值!是一个对象trueFalse是一个空字符串FalseTrue是一个非空字符串TrueFalse数值0FalseTrue非0数值TrueFalse是nullFalseTrueNaNFalseTrueundefinedfalsetrue操作符布尔操作符逻辑与(并且)(&&)该操作符有两个操作数。当且仅当两个操作数都为true时,返回true。否则返回false。逻辑与可以应用于任何类型的操作数,而不仅是boolean值。在有一个操作数不是boolean值的情况下,逻辑与操作不一定返回布尔值;它遵循如下原则:如果第一个操作数是对象,返回第二个操作数;如果两个操作数都是对象,返回第二个操作数;如果第二个操作数是对象,第一个操作数求值结果是true,返回第二个操作数,否则返回第一个操作数;如果第一个操作数为null,则返回null;如果第一个操作数为undefined,则返回undefined;如果第一个操作数为NaN,则返回NaN。操作符布尔操作符逻辑或(或者)(||)该操作符有两个操作数。当其中一个操作数为true时,返回true。都为False时,返回false。逻辑或可以应用于任何类型的操作数,在有一个操作数不是boolean值的情况下,逻辑或操作不一定返回布尔值;它遵循如下原则:如果第一个操作数是对象,返回第一个操作数;如果两个操作数都是对象,返回第一个操作数;如果第一个操作数求值结果为false,返回第二个操作数;如果有两个操作数为null,则返回null;如果有两个操作数为undefined,则返回undefined;如果有两个操作数为NaN,则返回NaN。操作符乘性操作符ECMAScript定义了3个乘性操作符:乘法、除法、求模。乘法(*)在操作数为非数值情况下会执行自动的类型转换(使用Number())。规则如下:如果乘积结果超过ECMAScript数值的表示范围,返回infinity或-infinity;如果有一个数是NaN,则结果是NaN;如果infinity与0相乘,结果是NaN;如果infinity与非0数值相乘,结果是infinity;如果是infinity与infinity相乘,结果是infinity;如果有一个操作数不是数值,则在后台调用Number()转换,再应用上面的规则。操作符乘性操作符除法(/)在操作数为非数值情况下会执行自动的类型转换(使用Number())。规则如下:如果除计算结果超过ECMAScript数值的表示范围,返回infinity或-infinity;如果有一个数是NaN,则结果是NaN;如果是infinity被infinity除,结果是NaN;如果是infinity被任意数值除,则结果是infinity;如果0被0除,结果是NaN;如果是非0的数,被0除。结果是infinity或-infinity,符号取决与操作数;(7/0)=infinity如果有一个操作数不是数值,则在后台调用Number()转换,再应用上面的规则。操作符乘性操作符求模(%)求余数。在操作数为非数值情况下会执行自动的类型转换(使用Number())。规则如下:如果被除数是无穷大值,而除数是有限大的值,则结果是NaN;(Number.POSITIVE_INFINITY%33)如果被除数是有限大的数值,而除数是0,则结果是NaN;(44%0)如果是infinity被infinity除,结果是NaN;如果被除数是有限大的值,而除数是无穷大的值,则结果是被除数;(44%Number.POSITIVE_INFINITY)如果被除数是0,结果是0;如果有一个操作数不是数值,则在后台调用Number()转换,再应用上面的规则。操作符加性操作符(+)加法操作符,如果两个操作数都是数值,执行常规的加法计算,根据下列规则返回结果:如果有一个数是NaN,则结果是NaN;如果是infinity加infinity,结果是infinity;如果是-infinity加-infinity,结果是-infinity;如果是+infinity加-infinity,结果是NaN;(+/-)0加(+/-)0,结果为0。如果两个操作数都是字符串,则将两个字串拼接起来;如果只有一个是字符串,则将另一个操作数转换为字符串,再拼接起来。(对象或boolean对其调用toString())操作符减性操作符(-)减法操作符,如果两个操作数都是数值,执行常规的减法计算,根据下列规则返回结果:如果有一个数是NaN,则结果是NaN;如果是infinity减infinity,结果是NaN;如果是-infinity减-infinity,结果是NaN;如果是+infinity减-infinity,结果是infinity;如果是-infinity减infinity,结果是-infinity;(+/-)0减(+/-)0,结果为0。如果有一个操作数是字符串、布尔值、null或undefined,则先在后台调用Number()将其转换为数值。如果有一个操作数是对象,则调用对象的valueOf()方法,如果没有valueOf()方法,调用toString()方法,并将得到的字符串转换为数值。操作符关系操作符关系操作符<,>,<=,>=这几个操作符都返回boolean值。如果操作数不都是数值类型时,进行转换的规则如下:如果两个操作数都是字符串,则比较两个字符串对应的字符编码值;(字符串比较的是字符编码的值,不是字母的前后位置,大写字母的编码值小)如果一个操作数是数值,则将另一个转换为数值再比较;如果一个操作数是对象,则调用其valueOf()ortoString()方法,再就前面说的规则比较;如果一个操作数是boolean类型,则先转换为数值,再比较。任何数与NaN进行关系比较,结果都是false。操作符相等操作符相等(==)和不相等(!=)在转换不同的数据类型时,相等和不相等操作符遵循下列规则:如果有一个操作数是布尔值,则在比较相等性前,先将其转换为数值;如果一个操作数是字符串,另一个是数值,在比较前先将字符串转换为数值;如果一个操作数是对象,另一个操作数不是,则调用对象的valueOf()方法;Null与undefined是相等的;在比较相等性之前,不能将null、undefined转换为其他任何值。如果有一个是NaN,相等返回false,不相等返回true;NaN与NaN不相等。如果两个操作数都是对象,则比较它们是不是同一个对象。是同一个对象返回true,否则返回false。(两个都是对象,则比较的是内存地址)操作符相等操作符全等(===)和(!==)全不等除了在比较之前不转换操作数之外,全等不全等与相等和不相等操作符没有区别。Varresult1=‘55’==55;//trueVarresult2=‘55’===55;//false;Varresult3=‘55’!=55;//falseVarresult4=‘55’!==55;//true条件操作符Variable=boolean_expression?true_value:false_value;相当于:if(boolean_expression){returntrue_value;}else{returnfalse_value;}

赋值操作符简单的赋值操作符由(=)表示,表示将操作符右边的值赋给左边的变量。Varnum=10;如果在等于号前面添加(+、-、*、/、<<、>>、>>>)运算符,可以合并运算与赋值操作。但不能提高效能。语句在JavaScript中,一条语句以“;”结束。也可以不加“;”,由解析器自己决定。推荐的使用方式:每条语句以“;”结束。语句ifif(condition){statement;}else{Statement;}if(condition){statement;}elseif(condition){statement;}elseif(condition){statement;}else{statement;}语句do…whilewhiledo{statement;}while(condition);while(condition){statement;}语句forfor-infor(initialzation;expression;post-loop-expression)Statement;Example:for(vari=0;i<100;i++){

alert(i);}For(propertyinexpression)statement;

example:

for(varpropinwindow){ alert(prop);//输出window对象的全部属性}vararr=newArray("a","b");for(vara=0;a<arr.length;a++)alert(arr[a]);for(variinarr)//i=0i=1alert(arr[i]);3段式语句labelLabel语句可以在代码中添加标签,以便将来使用。语法:label:statementExample:start:for(……){}此例中的“start”标记,将来可以被contionue或break语句引用。语句break和continue用以退出循环或执行下一次循环。在不与label配合使用的情况下,暂停当前的循环语句。当与label标记配合使用的情况下,可以定位到要退出的语句块或下一次要执行的语句块。varnum=0;outermost:for(vari=0;i<10;i++){for(varj=0;j<10;j++){

if(i==5&&j==5)

breakoutermost;

num++;

}

}alert(num);语句withwith语句的作用是将代码的作用域设置到一个特定的对象中。如定义with语句的目的主要是为了

温馨提示

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

最新文档

评论

0/150

提交评论