J2EE从入门到精通40-41-Ajax(8)

2019-03-28 15:34

由于变数可以接受任何型态的资料,在JavaScript中,常常偷偷发生型态转换,所以您一定要搞清楚,现在的型态是什么。

在JavaScript中有三种基本资料型态:数值、字串与布林值。

数值不分整数或小数,都用IEEE754标准64位元浮点数格式来表示,整数运算时,则使用32位元。可以使用Number.MAX_VALUE、Number.MIN_VALUE来取得数值的最大与最小表示范围,可以使用Number.POSITIVE_INFINITY或Infinity来表示正无限大的数值,使用Number.NEGATIVE_INFINITY或-Infinity来表示负无限大的数值,而非数值(NotANumbr)可以使用Number.NaN、NaN来表示。

数值虽然是基本资料型态,但在必要的时候,会自动转换为对象,例如以下的程式打算操作toString()方法,数值会自动转换为Number的Wrapper对象,将数值转换为2进位制、8进位制或16进位制表示法。

varw=10;

varx=w.toString(2);//转为2进位制表示\varz=w.toString(010);//转为8进位制表示\vary=w.toString(0x10);//转为16进位制表示\ varx=(10).toString(2);//转为2进位制表示\

在JavaScript中,字串是基本资料型态,而要操作相关方法时,执行时期可以转换为String的Wrapper对象,例如:

varmsg=\

msg.length;//传回字串长度5

msg.charAt(0)//传回\(索引从0开始)

String除了以上列出的方法之外,还可以使用indexOf()、substring()等方法。 布林值对应的Wrapper对象是Boolean。

在JavaScript中,可以使用+来串接字串,如果两个运算元中,有一个是字串,一个不是,则运算时后者会转换为字串,例如:

varx=1+\vary=\

但是-、*、/在字串上运作的话,则会尝试将运算元转换为数值再行运算。 varx=\vary=\varz=\

布林值在JavaScript中只有两个值:true跟false,必要时,JavaScript可以自动型态转换为1跟0,例如:

varx=true+10;//11

41.4对象

JavaScript是个支援对象导向的程式语言,但是他跟Java的对象观念不尽相同。

在JavaScript中,所有的对象其实都是Object的实例,实际上它是个具名称的资料集合,先来看个建立对象与其属性的例子:

varo=newObject(); o.name=\o.value=10;

document.write(o.name);//显示\

36

document.write(o.value);//显示10

以上的程式片段,还可以使用Objectinitializer的方式来建立: varo={name:\document.write(o.name); document.write(o.value);

您也可以以巢状的(nested)方式来指定对象,例如: varo={

p1:{x:10,y:10},//p1参考的是对象 p2:{x:20,y:20}//p2参考的是对象 };

document.write(o.p1.x);//显示10 document.write(o.p2.y);//显示20

在JavaScript中,对象的本质是一种阵列,是一种具名称的无序集合,可以像关联阵列(Associatearray)来存取当中的属性,例如:

varo=newObject(); o.name=\o.value=10;

document.write(o['name']);//相当于o.name document.write(o['value']);//相当于o.value o[?value?]=20;//相当于o.value=20

因为JavaScript中的对象具有阵列性质,您可以使用forin语法来取得对象的属性名称与值,例如:

varo={name:\for(pnameino){//取得属性名称 document.write(pname+':')

document.write(o[pname]+'
');//根据名称取得属性值 }

事实上,阵列(Array)的本质与对象是相同的东西,只不过阵列用来取得值的方式是靠索引值,例如:

vararr=newArray(); arr[0]=10;

arr[1]=\arr[2]=true; for(iinarr){

document.write(i+':');

document.write(arr[i]+'
'); }

41.5阵列与函式

在JavaScript中,阵列是Array的实例,您可以使用以下的方式建立阵列: vararr=newArray(); arr[0]=10;

arr[1]=\

37

arr[2]=true;

阵列中可以不同型态的资料,像是上例中的数值、字串或布林值,阵列有索引性质,索引由0开始,您也可以用Arrayinitializer的方式建立阵列并指定当中的元素值:

vararr=[10,\

阵列中不只可以置放基本资料型态,也可以置入对象,例如下例最后一个元素为使用JavaScript对象标记法定义了一个对象:

vararr=[10,'JavaScript',true,{x:10,y:10}]; document.write(arr[3].x);//显示10

JavaScript中没有实质对应的二维阵列观念,如果要在JavaScript中定义二维阵列,则要使用一维阵列来模拟,例如:

vararr=[[1,2,3],[4,5,6]];//arr[0]为一维阵列[1,2,3],arr[1]为一维阵列[4,5,6] for(vari=0;i

document.write('
'); }

接着先来看到JavaScript的函式(function),在JavaScript中的函式,参数不需要宣告型态,如果有传回值,不需要宣告传回值型态,直接使用return即可,如果不传回值则不撰写return,函式执行完毕后自动传回\,例如:

functionsome(arg1,arg2){ varx=arg1;

document.write(arg1,'
'); document.write(arg2,'
'); …. returnx; }

呼叫函式时可以指定任意数目的引数,若引数少于参数个数,少的部份之参数值会被设定为\。

在JavaScript中,函式是First-Class对象,为Function的实例,您可以将函式指定给变数,例如: functionsome(arg){

document.write(arg,'
'); }

varother=some;//将函式对象指定给other other('demo');//跟执行some('demo')是相同的

您可以使用objectinitializer的方式建立函式对象,再指定给某个变数名称,例如: varsome=function(arg){ document.write(arg,'
'); }

some('demo');

或者是以new关键字来建立Function实例,例如: varsome=

newFunction(\some('demo');

Function对象在建构时的第一个引数是参数名称,第二个引数是函式的本体内容。

您也可以将函式指定给对象作为属性,这样作的结果,让函式有点类似Java之类的程式语言中

38

对象导向的方法(method),例如:

varobj=newObject(); obj.some=function(arg){ document.write(arg,'
'); }

obj.some('demo');

在使用Objectinitializer时,也可以指定函式对象,例如: varobj={ x:10,

some:function(){

document.write(this.x); } };

obj.some();

您可以让函式在对象之间“借来借去”,其实您只要知道函式在JavaScript中是Function的实例,这样的操作就一点也不奇怪了:

functionother(){

document.write(this.x); }

varobj1=newObject(); obj1.x=10;

obj1.some=other;//注意,没有括号 varobj2=newObject(); obj2.x=20;

obj2.some=other;//注意,没有括号 obj1.some(); obj2.some();

在JavaScript中有this关键字,它的作用与Java中的this类似,当透过某个对象加上函式名称来呼叫时,会将this参考至该对象,例如:

functionother(){

document.write(this.x); }

varobj1=newObject(); obj1.x=10;

obj1.some=other; varobj2=newObject(); obj2.x=20;

obj2.some=other;

obj1.some();//此时this参考至obj1参考的对象 obj2.some();//此时this参考至obj2参考的对象

因为函式是对象,是Function的实例,所以您可以将函式指定给阵列作为其元素之一,这一点也不奇怪,例如:

varfarr=newArray();

farr[0]=function(arg){returnarg+arg;}; farr[1]=function(arg){returnarg*arg;}; document.write(farr[0](10)+'
');

39

document.write(farr[1](10));

而在JavaScript中,将函式作为引数传递给另一个函式,也是很常见的,例如: functionsome(x){ returnx*x; }

functionother(f){ vary=f(10); returny; }

document.write(other(some));//将some参考的Function实例作为引数,传给f

在上例中,执行other时,当中会执行所传入的Function对象,也就是some参考的实例,所以最后执行结果的传回结果会是100。

一个实际的应用例子是Array的sort()函式,您要传入一个Array实例,并传入一个Function实例,告知如何针对两个元素进行大小比较,例如:

vararr=[1,5,3,2,4]; functionhow(a,b){

if(a>b){return-1;}//传回小于0的值表示a要排在b的后面 elseif(a

Array.sort(arr,how);//传入Array与Function实例 for(iinarr){//显示排序结果 document.write(arr[i]); }

在JavaScript中,您可以传递给函式任意的引数数量,如果引数的数量小于参数的数量,则多出来的参数会被设定为\,事实上所有的引数都被储存在arguments中,参数名称其实只是arguments中某个元素的另一个表示方式。

下例是一个使用arguments的简单任意数目引数的加总函式: functionsome(){ varsum=0;

for(vari=0;i

returnsum; }

document.write(some(1,2,3)); document.write(some(1,2,3,4,5));

如果您想检查函式个数的话,以下是一个例子: functionsome(x,y){

if(arguments.length!=2){ alert(\必须是2个引数\returnnull; }

returnx+y; }

40


J2EE从入门到精通40-41-Ajax(8).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:某新建城镇污水处理厂设计开题报告

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: