javascript高级程序设计.docx

上传人:b****6 文档编号:8020112 上传时间:2023-05-12 格式:DOCX 页数:11 大小:22.42KB
下载 相关 举报
javascript高级程序设计.docx_第1页
第1页 / 共11页
javascript高级程序设计.docx_第2页
第2页 / 共11页
javascript高级程序设计.docx_第3页
第3页 / 共11页
javascript高级程序设计.docx_第4页
第4页 / 共11页
javascript高级程序设计.docx_第5页
第5页 / 共11页
javascript高级程序设计.docx_第6页
第6页 / 共11页
javascript高级程序设计.docx_第7页
第7页 / 共11页
javascript高级程序设计.docx_第8页
第8页 / 共11页
javascript高级程序设计.docx_第9页
第9页 / 共11页
javascript高级程序设计.docx_第10页
第10页 / 共11页
javascript高级程序设计.docx_第11页
第11页 / 共11页
亲,该文档总共11页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

javascript高级程序设计.docx

《javascript高级程序设计.docx》由会员分享,可在线阅读,更多相关《javascript高级程序设计.docx(11页珍藏版)》请在冰点文库上搜索。

javascript高级程序设计.docx

javascript高级程序设计

构成javascript完整实现的各个部分:

>javascript的核心ECMAScript描述了该语言的语法和基本对象;

>DOM描述了处理页面内容的方法和接口;

>BOM描述了与浏览器进行交互的方法和接口;

原始值和引用值

在ECMAScript中,变量可以存放两种类型的值,即原始值和引用值。

原始值是存储在栈中的简单数据段,也就是说,它们的值直接存储在变量访问的位置。

引用值是存储在堆中的对象,也就是说,存储在变量处的值是一个指针,指向存储对象的内存处。

 

为变量赋值时,ECMAScript的解释程序必须判断该值是原始类型的,还是引用类型的。

要实现这一点,解释程序则需尝试判断该值是否为ECMAScript的原始类型之一。

由于这些原始类型占据的空间是固定的,所以可将它们存储在较小的内存区域----栈中。

ECMAScript有5种原始类型,即underfined、null、boolean、number、string

ECMAScript提供了typeof运算来判断一个值是否在某种类型的范围内。

注意:

对变量或值调用typeof运算符的时候返回object---的变量是一种引用类型或null类型。

String类型的独特之处在于,它是唯一没有固定大小的原始类型。

 

转换成字符串:

ECMAScript的boolean值、数字、字符串的原始值得有趣之处在于它们是伪对象,这意味着它们实际上具有属性和方法。

这3中主要的原始值都有toString()方法,可以把它们的雾值转换成字符串。

注意:

ECMAScript定义所有对象都有toString()方法,无论它是伪对象,还是真的对象。

转换成数字:

ECMAScript提供了两种把非数字的原始值转换成数字的方法,即parseInt()以及parseFloat()。

强制类型转换:

ECMAscript中可用的3中强制类型转换

Boolean(value)

Number(value)

String(value)

引用类型:

引用类型通常叫作类,也就是说,遇到引用值时,所处理的就是对象。

对象是由new运算符加上要实例化的类的名字创建的。

varo=newObject();或者varo=newObject;

Object类:

对象.属性

Object类中所有属性和方法都会出现在其他类中。

引用就相当于指针。

对象的函数、对象本身(原型)、对象的属性、创建对象的函数。

Constructor:

对创建对象的函数的引用。

Prototype:

对该对象的对象原型的引用。

HasOwnProperty(property):

判断对象是否有某个特定的属性。

IsPrototypeOf(obejct):

判断该对象是否为另一个对象的原型。

PropertyIsEnumerable(property):

ToString():

返回对象的原始字符串表示;

ValueOf():

返回该对象的原始值,也就是最初赋的那个值。

 

Boolean类:

ValueOf()方法,返回原始值,即为true或false。

建议:

最好还是使用Boolean原始值。

Varss=newBoolean(true);

Varoo=newNumber(666);

Varsi=newString(“helloworld”);

 

String类:

String类的属性length:

输出字符个数

chartAt()和charCodeAt()都是访问字符串中的单个字符。

字符与字符代码

concat():

用于把一个或多个字符串连接到String对象的原始值上--后接

varo=newString(“hello”);

varsResult=o.concat(“world”);==o+”world”都输出helloworld。

indexOf()和LastIndexOf()方法返回的都是指定字串在另一个字符串的位置。

如果没有找到返回-1;这两个方法不同在于,检索相反。

LocalCompare()对字符串进行排序,该方法有一个参数—要进行比较的字符串,返回的是下列3个值之一:

如果String对象按照字母顺序在参数中的字符串之前,返回负数。

如果String对象等于参数中的字符串,返回0。

如果String对象按照字母顺序排在参数中的字符串之后,返回正数。

VaroString=newString(“yellow”);

Alert(oString.localeCompare(“brick”);//outputs”1”

LocalCompare()对字符串的头字母进行排序。

LocalCompare()是区分大小写的,大写字母在字母顺序上排在小写字母之后。

ECMAScript提供了两种方法从子串创建字符串值,即slice()和substring()。

这两个方法都接受一个或两个参数。

就是对一个字符串进行截取操作。

不同的是,它们都有负数的处理方式稍有不同。

对于String(),参数为负数为转换为0;

对于slice(),参数为负数的时候,转换为:

字符串的总长度加上该负数。

有4中方法用于执行大小写转换,即toLowerCase()、toLocaleLowerCase()、toUpperCase()、toLocaleUpperCase()。

对于toLowerCase()和toUpperCase()方法时原始的,toLocalLowerCase()和toLocalUpperCase()方法时基于特定的区域实现的—使用区域特定的方法才能进行正确的转换。

一般说来,如果不知道在以哪种编码运行一种语言,则使用区域特定的方法比较安全。

ToLocalLowerCase()与toLocalUpperCase()会根据本地的编码进行大小转换。

 

Instanceof运算符:

在使用typeof运算符时采用引用类型存储值会出现一个问题---无论引用的是什么类型的对象,返回的都是”object”类型。

Instanceof方法却可以明确对象为某特定类型。

 

运算符:

一元运算符—只有一个参数,即要操作的对象或值。

包括delete、void、前增量/前减量运算符(++/--)、后增量/后减量运算符(++/--)、一元加法和一元减法。

对于delete运算符是删除对以前定义的对象属性或方法的引用(仅为开发人员为对象定义的属性或方法)。

对于void运算符对任何值都返回undefined。

该运算符通常用于避免输出不应该输出的值。

如:

window.open(‘about:

blank’)”>ClickMe

点击链接之后,会在创建的新窗口上,输出该open返回的obejct对象。

void(window.open(‘about:

blank’))”>ClickMe

对于前后增量运算符,就是在数值上加1,对于前后减量,就是在数值减-1;

对于一元加法和一元减法,本质上对数字无任何影响,但会把字符串转换成数字。

 

位运算符:

--以二进制数字进行运算

1重温整数。

ECMAScript整数有两种类型,即有符号整数(允许用整数和负数)和无符号整数(只允许用整数)。

在ECMAScript中,所有整数字面量默认都是有符号整数。

有符号整数使用前31位表示整数的数值,用第32为表示整数的符号,0表示正数,1表示负数。

数值的范围从-2147483648到2147483647。

VariNum=10;

Alert(iNum.toString

(2));//outputs”10010”

 

负数也存储为二进制代码,不过采用的形式是二进制补码。

计算数字二进制补码的步骤有三步:

1确定该数字的非负版本的二进制表示。

2求得二进制反码,即要把0替换为1,把1替换为0;

3在二进制反码上加1;

注意:

有趣的是,ECMAScript并不以二进制补码的形式显示,而是用数字绝对值的标准的二进制代码前加负号的形式输出。

--ECMAScript的简单处理的方式。

VariNum=-18;

Alert(iNum.toString

(2));//outputs”-10010”

另一方面,无符号整数把最后一位作为另一个数位处理。

在这种模式中,第32位不表示数字的负号,而是值2的31幂。

无符号整数的数值范围为0到4294967295。

注意,所有整数字面量都默认存储有符号整数。

只有用ECMAScript的位运算符才能创建无符号整数。

位运算NOT(~),位运算NOT是三步的处理过程:

1把运算数转换成32为数字;

2把二进制形式转换成它的二进制反码。

3把二进制反码转换成运算数形式。

位运算NOT实质上是对数字求负,然后减1;

 

位运算AND(&),直接对运算数的二进制形式进行运算。

把它们的二进制数字对齐。

正正>正1、负负>负0;正负>负0、负正>负0;再把二进制数字转换成运算数形式。

 

位运算OR(|),直接对运算数的二进制形式进行运算。

把它们的二进制数字对齐。

正正>正1、负负>负0、正负>正1、负正>正1;再把二进制数字转换成运算数形式。

位运算XOR(^),直接对二进制数字进行运算。

当运算中的两个二进制数字,只有一个数位存的是1,它才返回1。

左移运算(”<<”),直接对运算数的二进制数字操作,如运算数2,的二进制数为00010,左移5位结果为64二进制中为1000000。

有符号右移运算(“>>”),将把32位数字中的所有数位整体右移,同时保留该数的符号。

有符号右移运算恰好与左移运算相反。

 

无符号右移运算(>>>),对于整数的操作与有符号右移运算一样,对于负数有所不同。

(无符号不存在负数)。

VariUnsigned64=-64>>>0;

Alert(iUnsigned64.toString

(2));----outputs”111111*********1111111110000000”,即由符号整数-64的二进制补码表示,不过它的等于无符号整数4294967232。

出于这种原因。

使用无符号右移运算符要小心。

 

Boolean运算符:

--运算的结果为boolean值

Boolean运算符有三种,逻辑NOT(!

)、逻辑AND(&&)和OR(||).

逻辑NOT运算符的行为如下:

1如果运算数是对象,返回false

2如果运算数是数字0,返回true

3如果运算数是0以外的数字,返回false

4如果运算数是null,返回true

5如果运算数是NaN,返回true

6如果运算数是undefined,发生错误。

 

逻辑AND运算并不一定返回Boolean值:

1如果一个运算数是对象,另一个是Boolean值,返回该对象。

2如果两个运算数都是对象,返回第二个对象。

3如果某个运算数是null,返回null

4如果某个运算数是NaN,返回NaN

5如果某个运算数是undefined,发生错误。

逻辑OR(||)的运算行为与AND的差异是:

1如果两个运算数都是对象,返回第一个对象。

2如果第一个运算数为true,就不再计算第二个运算数。

 

乘性运算符:

乘(*)除(/)(%)

加性运算符:

加(+)减(-)

关系运算符:

小于<、大于>、小于等于<=、大于等于>=

等性运算符:

判断两个变量是否相等是程序设计中非常重要的运算。

在处理原始值时,这种运算相当简单。

但涉及对象,任务就稍有点复杂。

ECMAScript提供了两套运算符处理这个问题,等号和非等号用于处理原始值,全等号和非全等号用于处理对象。

对于等号(==)和非等号(!

=),操作原始值。

执行类型转换的基本规则如下:

1如果一个运算数是Boolean值,在检查相等性之前,把转换成数字值,false转换为0,true转换成1,。

2如果一个运算数是字符串,另一个是数字,在检查相等性之前,要尝试把字符串转换成数字。

3如果一个运算数是对象,另一个字符串,在检查相等性之前,要尝试把对象转换成字符串。

4如果一个运算数是对象,另一个数字,在检查相等性之前,要尝试把对象转换成数字。

对于全等号和非全等号在比较时,不尝试进行任何类型转换。

条件运算符:

Variable=boolean_expression?

Ture_value:

false_value;

赋值运算符:

简单的赋值运算(=)。

VariNum=10;iNum=iNum+10;等价于:

VariNum=10;iNum+=10;

 

函数:

要执行的标示

函数是一组可以随时随地运行的语句,函数是由关键字function、函数名加一组参数以及置于括号中要执行的代码声明的。

方法定义:

Functionsay(sName,sMessage){alert(“Hello”+name”,”+sMessage);}

方法调用:

Say(“nusss“,”howareyoutoday?

”)

函数say()未声明返回值,不过不必专门声明它。

同样的,即使函数确实有返回值,也不必明确地声明它。

该函数只需要使用return。

另一个重要的概念是,函数在执行过return语句后停止执行代码。

一个函数中可以有多个return语句。

Functiondiff(iNum1,iNum2){

If(iNum1>iNum2){returniNum1-iNum2;}

Else{returniNum2-iNum1;}

}

如果函数无返回值,那么可以调用没有参数的return运算符,随时推出函数。

无重载:

ECMAScript可用相同的名字在同一个作用域中定义两个函数,而不会引发错误,但真正使用的是后一个函数。

如:

FunctiondoAdd(iNum){alert(iNum+100);}

FunctiondoAdd(iNum){alert(iNum+10);}

doAdd(10);//outputs”20”;

arguments对象:

在函数代码中,使用特殊对象arguments,开发者无需明确指出参数名,就能方位它们。

还可用arguments对象检测专递给函数的参数个数,引用属性arguments.length即可。

那么如果把方法的参数看对一个对象,这个对象就用arguments来表示。

与其他程序设计语言不同,ECMAScript不会验证传递给函数的参数个数是否等于函数定义的参数个数。

用arguments对象判断传递给函数的参数个数,即可模拟函数重载:

FunctiondoAdd(){

If(arguments.length==1){alert(arguments[0]+10);

}elseif(arguments.length==2){alert(arguments[0]+arguments[1]);}

}

doAdd(10);

doAdd(30,20);

Function类:

ECMAScript最令人感兴趣的可能莫过于函数实际上是功能完整的对象。

Function类可以表示开发者定义的任何函数。

如果函数看成一个对象的话,那么这个对象的名字为Function。

用Function类直接创建函数的语法如下:

Varfunction_name=newFunction(argument1…,argumentN,function_body);

 

doAdd=newFunction(“iNum”,”alert(iNum+100)”);

doAdd=newFunction(“iNum”,”alert(iNum+10)”);

doAdd(10);

观察这段代码,很显然,doAdd的值被改成了指向不同对象的指针。

函数名只是指向函数对象的引用值,行为就像其他指针一样。

甚至可以使两个变量指向同一个函数:

VardoAdd=newFunction(“iNum”,”alert(iNum+10)”);

VaralsoDoAdd=doAdd;

doAdd(10);//outputs:

20

alsoDoAdd(10);//outputs:

20

对象基础:

介绍过一切都是对象的概念。

本章的重点是如何操作以及使用这些对象,以及如何创建自己的对象,以根据需要增加专用的功能。

每个对象都由类定义,可以把类看作对象的配方。

类不仅要定义对象的接口,还要定义对象的内部工作。

编译器和解释程序都根据类的说明构建对象。

程序使用类创建对象时,生成的对象叫做类的实例。

对类生成的对象的个数的唯一限制来自于运行代码的机器的物理内存。

每个实例的行为相同,但实例处理一组独立的数据。

对象定义存放在一个函数---构造函数中。

构造函数不是一种特殊函数,它只不过是用于创建对象的常规函数。

 

面向对象语言的要求:

一种面向对象语言需要想开发者提供四种基本能力:

1封装—把相关的信息(无论数据或方法)存储在对象中的能力

2聚集—把一个对象存储在另一个对象内的能力

3继承—由另一个类(或多个类)得来类的属性和方法的能力。

4多态—编写能以多种方法运行的函数或方法的能力。

在ECMAScript中,对象由特性构成,特性可以是原始值,也可以是引用值。

如果特性存放的是函数,它将被看作对象的方法,否则该特性被看作属性。

对象应用:

1声明和实例化对象是用关键字new后跟要实例化的类的名字创建的:

VaroObject=newObject();

VaroStringObject=newString();

第一行代码创建了Object类的一个实例,并把它存储在变量oObject中。

第二行代码创建了String类的一个实例,把它存储在变量oStringObject中。

如果构造函数无参数,括号则不是必需的。

VaroObject=newObject;//实例化Object对象,且将对象存放在oObject中。

对象引用:

在ECMAScript中,不能访问对象的物理表示,只能访问对象的引用。

每次创建对象,存储在变量中的都是该对象的引用,而不是对象本身。

 

对象废除:

把对象的所有引用都设置为null,可以强制性的废除对象。

早绑定和晚绑定:

所谓绑定,即把对象的接口与对象实例结合在一起的方法。

早绑定是指在实例化对象之前定义它的特性和方法,这样编译器或解释器程序就能提前转换机器代码。

另一方面,晚绑定指的是编译器或解释器程序在运行前,不知道对象的类型。

使用晚绑定,无需检查对象的类型,只需要检查对象是否支持特性和方法即可。

ECMAScript中的所有变量都采用晚绑定方法,这样就允许执行大量的对象操作。

 

对象的类型:

在ECMAScript中,所有对象并非同等创建的。

一般说来,可以创建并使用的对象有三种:

[本地对象、内置对象、宿主对象]

一:

本地对象,独立于宿主环境的ECMAScript实现提供的对象。

简单说来,本地对象就是ECMA-262定义的类(引用类型)

ArraystringdatenumberregexpreferenceError…….

Array类:

使用这两个方法,一点要使用括号:

VaraColors=newArray();

aColors[0]=“red”;

aColors[1]=“green”;

aColors[2]=“blue”;

这里创建了一个数组,并定于了三个数组项。

每增加一个数组项,数组的大小就动态地增长。

VaraColors=newArray(“red”,”green”,”blue”);

数组可以根据需要增大或减少。

最多可以存放4294967295项。

Function的toString()方法返回以字符串形式该方法内容。

Array对象覆盖了toString()方法和valueOf()方法,返回特殊的字符串。

 

Date类:

Aard=newDate();

toDateString()—以实现的特定的格式显示Date的日期部分;

toTimeString()—以实现的特点的格式显示Date的时间部分;

toLocalString()—以地点特点的格式显示Date的日期和时间;

 

内置对象:

由ESMAScript实现提供的、独立于宿主环境的所有对象,在ECMAScript程序开始执行时出现。

只定义两个内置对象,即Global和Math(它们也是本地对象,根据定义,每个内置对象都是本地对象)。

Global对象:

Global对象是ECMAScript中最特别的对象,因为实际上它根本不存在。

如果尝试编写下面的代码,讲得到错误:

Varpointer=Global;

错误消息显示Global不是对象。

这里需要理解的主要概念是,在ECMAScript中,不存在独立的函数,所有函数都必须是某个对象的方法。

如isNaN()、isFinite()、parseInt()和parseFloat()等。

它们都是Global对象的方法。

 

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2