版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 门禁管理系统安装调试施工方案及技术措施
- 2026年成都中医药大学2026学年内科护理学题库及答案
- 2026年中国石油天然气股份有限公司规划总院招聘笔试参考题库含答案
- 起重吊装及指挥安全风险告知书
- 盾构隧道管片检漏试验与抗渗质量控制措施
- 2026年冶金流程试题答案及解析
- 2026年医护三基三严考试试题及答案
- 2026年(N2)观光车和观光列车司机考试真题(含答案)
- 2026年养老服务管理师资格认证考试试题及答案解析
- 2026江西同济建设项目管理股份有限公司招聘参考题库及完整答案详解【易错题】
- 九年级语文下册 12《渔家傲·秋思》
- 市政排污口整治与监测技术方案
- 屋檐铝板施工方案(3篇)
- 《增材制造技术》全套教学课件
- 2025NCCN临床实践指南:急性淋巴细胞白血病(2025.V1)课件
- Unit 7 第1课时 Section A (1a-1d)(教学课件)初中英语人教版(2024)七年下册
- 公益和公共法律服务工作委员会2025年工作计划及实施方案
- (正式版)DB61∕T 2113-2025 《单位食堂反餐饮浪费管理规范》
- 定制药园协议书
- 电厂岗位招聘面试常见问题解答指南
- 2026届广东省广雅中学高一化学第一学期期中学业水平测试模拟试题含解析
评论
0/150
提交评论