JavaScript基础知识点归纳_第1页
JavaScript基础知识点归纳_第2页
JavaScript基础知识点归纳_第3页
JavaScript基础知识点归纳_第4页
JavaScript基础知识点归纳_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

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

文档简介

JavaScript基础学问点归纳(举荐)

定义在函数外的变量确定是全局变量;定义在函数内的

变量,假如声明白var,那该变量就是局部变量,假如不声

明var,那么该变量就是全局变量。

1、全局变量与局部变量

JavaScript

varglobal="Global”;

test;

functiontest{

varlocal="Local”;

document,writein(global);

document,writein(local);

}

document,writein(global);

document,writein(local);

2、两种类型的Cookie

i)许久性cookie,会被存储到客户端的硬盘上。

ii)回话cookie:不会被存储到客户端的硬盘上,而是

放在阅读器进程所处的内存当中,当阅读器关闭时则该回话

cookie就销毁了。

3、在JavaScript中,函数(function)就是对象

4、在JavaScript中,没有方法(函数)重载的概念

5、Function对象

在JavaScript中有一个Function对象,全部自定义的

函数都是Function对象类型的。Function对象接受的全部

参数都是字符串类型的,其中最终一个参数就是要执行的函

数体,而前面的参数则是函数真正须要接受的参数。

6、隐含的对象arguments

在JavaScript中,每个函数都有一个隐含的对象

arguments,表示给函数实际传递的参数。arguments,length

就表示实际传递的参数的个数。

7、函数名.length

每一个函数对象都有一个length属性,表示该函数期

望接受的参数个数。它与函数的arguments不同。

arguments,length表示函数实际接受的参数个数。

8、JavaScript中有五种原始数据类型

Undefined>Null、Boolean>Number以及String。(留

意:在JavaScript中,没有char数据类型)

Undefined数据类型的值只有一个:undefined;

Null数据类型的值只有一个:null;

Boolean数据类型的值有两个:true和false;

9、typeof运算符

typeof是一元运算符,后跟变量的名称,用于获得变量

的数据类型,其返回值有5个:undefined、boolean>number>

string以及objecto

10、在JavaScript中,假如函数没有声明返回值,那

么会返回undefinedll>null与undefined的关系

undefined事实上是从null派生出来的。例如:

null与undefined的关系

JavaScript

alert(undefined==null);

〃阅读器返回true

11、强制类型转换

在JavaScript中有3种强制类型转换:Boolean

(value),Number(value),String(value)。

12>Object对象

在JavaScript中,全部对象都是从Object对象继承过

来的。

Object对象

JavaScript

varobject=newObject;

for(varvinobject){

alert(v);

}

上面的代码中,阅读器并没有打印出什么,并不能说明

Object对象不带有任何属性。下面代码测试Object对象中

的属性是否可以枚举,假如返回false,则说明Object对象

中的属性是不能枚举的。

Object对象中的属性是不能枚举的

JavaScript

alert(pertyIsEnumerable("prototype"));

阅读器弹出false对话框,则说明Object对象中的属

性是不能枚举的。

接下来我们再看看window对象中的属性是否可以枚举

window对象中的属性是可以枚举的

JavaScript

for(varvinwindow){

console,log(v);

}

在Chrome阅读器中我们会看到阅读器调试限制台中打

印出一大堆属性,说明window对象中的属性是可以枚举的。

13、在JavaScript中,可以动态添加对象的属性,也

可以动态删除对象的属性

动态添加/删除对象的属性

JavaScript

varobject=newObject;

alert(object,username);//undefined

object,username="zhangsan”;

alert(object,username);//zhangsan

object["password〃]=〃123〃;

alert(object,password);//123

deleteobject,username;//止匕时,username属性已经

被删除

alert(object,username);

14、JavaScript中定义对象最常见的方式

定义对象最常见的方式

JavaScript

varobject={

username:zhangsan,

password:12345

);

alert(object,username);

alert(object,password);

15、数组

数组定义

JavaScript

〃方法一

vararray=newArray;

array,push(1);

array,push(2);

array,push(3);

alert(array.length);

〃方法二(举荐)

vararray=[1,25,41;

array,sort;

alert(array);

调用数组的sort()方法,阅读器打印1,25,4,这

并不是我们期望的结果。

对于JavaScript数组的sort方法来说,它会先将待排

序的内容转换为字符串(调用toString方法),依据字符

串的先后依次进行排序。

下列方式可以得到我们期望的结果(按数组大小进行排

序):

数组排序

JavaScript

functionpare(numl,num2){

vartempi=parselnt(numl);

vartemp2=parselnt(num2);

if(tempireturn-1;

}elseif(tempi==temp2){

return0;

}else{

return1;

)

}

vararray=[1,25,31;

array,sort(pare);

alert(array);

我们再用匿名函数的方式实现:

匿名函数排序

JavaScript

vararray=[1,25,31;

array,sort(function(numl,num2){

vartempi=parselnt(numl);

vartemp2=parselnt(num2);

if(tempireturn-1;

}elseif(tempi==temp2){

return0;

}else{

return1;

}

));

alert(array);

16、JavaScript中定义对象的5种方式(JavaScript

中没有类的概念,只有对象)i)基于已有对象扩充其属性

和方法

基于已有对象扩充其属性和方法

JavaScript

varobject=newObject;

〃添加name属性

object,name="zhangsarT;

〃添加sayName方法

object.sayName=function(name){

this,name=name;

alert(this,name);

);

object.sayName(〃kyle");〃调用sayName方法,name

属性被修改为kyle,阅读器将打印kyle

最简洁的一种方式,运用起来并不便利,适合于临时须

要一个对象。

ii)工厂方式创建对象

不带参数的工厂方法:

JavaScript

〃工厂方法

functioncreateObject{

varobject=newObject;〃创建一个对象

object,name="zhangsarT;〃为该对象添加一个

name属性

object,password=〃123〃;〃为该对象添加一个

password属性

object,get=function{〃为该对象添加一个get

方法

alert(this.name+〃,〃+this.password);

);

returnobject;〃返回该对象

}

varobjectl=createObject;〃调用createObject

工厂方法创建对象objectl

varobject2=createObject;〃调用createObject

工厂方法创建对象object2

objectl.get;〃调用对象get方法

object2.get;〃调用对象get方法

带参数的工厂方法:

JavaScript

functioncreateObject(name,password){

varobject=newObject;

object,name=name;

object,password=password;

object,get=function{

alert(this.name+〃,〃+this.password);

);

returnobject;

}

varobjectl=createObject("zhangsan”,〃123”);

varobject2=createObject(〃lisi〃,〃456〃);

objectl.get;

object2.get;

上面两种不带参数和带参数的工厂方法缺点:

每创建一个对象,内存中就创建一个get方法,比较奢

侈内存,且影响性能。而我们的期望是,创建两个不同的对

象,它们的属性是不一样的,但方法是共用的。所以接下来

我们须要改进createObject工厂方法。

改进的工厂方法:

JavaScript

functionget{

alert(this.name+〃,〃+this.password);

}

functioncreateObject(name,password){

varobject:newObject;

object,name=name;

object,password=password;

object,get=get;

returnobject;

}

varobjectl=createObject("zhangsan”,〃123〃);

varobject2=createObject(〃lisi〃,〃456”);

objectl.get;

object2.get;

将get方法定义在createObject函数外面,这样每

创建一个对象,get方法都是共用的。让一个函数对象被多

个对象所共享,而不是每一个对象都拥有一个函数对象。

iii)构造函数方式创建对象

不带参数的构造函数:

JavaScript

functionPerson{

〃在执行行代码前,js引擎会为我们生成一个对象

this,name="zhangsan”;

this,password="123";

this.getlnfo=function{

alert(this.name+〃,“+this.password);

);

〃此处有一个隐含的return语句,用于将之前生成

的对象返回(也是跟工厂方式不一样的地方)

}

varpl=newPerson;

pl.getlnfo;

带参数的构造函数

JavaScript

functionPerson(name,password){

this,name=name;

this.password=password;

this,getlnfo=function{

alert(this.name+〃,〃+this.password);

);

}

varpl=newPerson("zhangsan”,〃123〃);

varp2=newPerson("lisi〃,〃456〃);

pl.getlnfo;

p2.getlnfo;

iv)原型(prototype)方式创建对象

prototype是Object对象里面的一个属性

prototype

JavaScript

functionPerson{

Person,prototype,name="zhangsan”;

Person,prototype,password=〃123〃;

Ptotype,getlnfo=function(

alert(this.name+〃,〃+this.password);

);

varpl=newPerson;

varp2=newPerson;

pl.name=〃kyle〃;〃对象生成之后再去变更属性

pl.getlnfo;

p2.getlnfo;

单纯地运用原型方式有两个问题:,你无法在构造函数

中为属性赋初值,只能在对象生成之后再去变更属性值。

prototype

JavaScript

functionPerson{

}

Person,prototype,name=newArray;

Person,prototype,password=〃123〃;

Ptotype.getlnfo=function(

alert(this.name+〃,〃+this.password);

);

varpl=newPerson;

varp2=newPerson;

pl.name,push("zhangsan");

pl.name,push(,,lisi,/);

pl.password=〃456”;

pl.getlnfo;

p2.getlnfo

阅读器将会打印:zhangsan,lisi,456和zhangsan,

lisi,123.

假如运用原型方式创建对象,那么生成的全部对象会共

享原型中的属性,这样一个对象变更了该属性也会反应到其

他对象当中。所以单纯地运用原型方式是不行的,还须要结

合其他方式。接下来我们会接着介绍。

运用原型+构造函数方式来定义对象

JavaScript

functionPerson{

this,name=newArray;

this.password="123";

}

Ptotype,getlnfo=function(

alert(this.name+”,〃+this.password);

);

varpl=newPerson;

varp2=newPerson;

pl.name,push(,,zhangsan,/);

p2.name.push("lisi〃);

pl.getlnfo;

p2.getlnfo;

运用原型+构造函数方式来定义对象,对象之间的属性

互不干扰,各个对象间共享同一个方法,这是一种比较好的

方式。

v)动态原型方式

JavaScript

functionPerson{

this,name="zhangsan”;

this.password=〃123〃;

if(typeofPerson,flag=="undefined"){

alert("invoked");

Ptotype,getlnfo=function{

alert(this,name+〃,〃+this.password);

Person,flag=true;

varpl=newPerson;

varp2=newPerson;

pl.getlnfo;

p2.getlnfo;

在动态原型方式中,在构造函数中通过标记量让全部对

象共享一个方法,而每个对象拥有自己的属性。上面代码在

次创建对象时,首先通过一个推断语句,看flag属性是否

已经定义,若没有定义,则通过原型方式添加getlnfo方法,

然后将flag设置为true,那么当其次次创建对象时,if语

句推断为假,跳过执行。这样就达到了我们所期望的结果,

创建的对象属性是互不干扰的,而对象的方法是共享的。

17、JavaScript中对象的继承(5种方式)

种方式:对象冒充

冒充对象继承

JavaScript

〃父类

functionParent(username){

this,username=username;

this.sayHello=function{

alert(this,username);

);

〃子类

functionChild(username,password){

〃下面三行代码是最关键的

this,method二Parent;

this,method(username);

deletethis,method;

this,password=password;

this.sayWorld=function{

alert(this,password);

);

}

varp=newParent(〃zhangsan〃);

varc=newChild(〃lisi”,〃123〃);

p.sayHello;

c.sayHello;

c.sayWorld

其次种方式:call

继承的其次种实现方式,call方法方式,call方法是

Function对象中定义的方法,因此我们定义的每个函数都拥

有该方法。call方法的个参数会被传递给函数中的this,

从第2个参数起先,逐一赋给函数中的参数。

call继承父类

JavaScript

functiontest(str){

alert(this.name+〃,〃+str);

}

varobject=newObject;

object,name="zhangsarT;

//test,call相当于调用了test函数

test,call(object,“html5war");〃将object赋给了

this

接下来我们用call方式实现对象的继承

JavaScript

〃父类

functionParent(username){

this,username=username;

this.sayHello=function{

alert(this,username);

};

}

〃子类

functionChild(username,password){

Parent,call(this,username);

this,password=password;

this.sayWorld=function{

alert(this,password);

};

}

varp=newParentC'zhangsan^);

varc=newChild("lisi",〃123〃);

p.sayHello;

c.sayHello;

c.sayWorld;

第三种方式:apply

apply继承父类

JavaScript

〃父类

functionParent(username){

this,username=username;

this.sayHello=function{

alert(this,username);

);

〃子类

functionChild(username,password){

Parent,apply(this,newArray(username));

this.password=password;

this.sayWorld=function{

alert(this,password);

);

}

varp=newParentC'zhangsan^);

varc=newChild("lisi〃,"123”);

p.sayHello;

c.sayHello;

c.sayWorld;

apply方法与call方法很类似,apply方法也是定义在

Func

温馨提示

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

评论

0/150

提交评论