《2022年JavaScript基础知识点归纳.docx》由会员分享,可在线阅读,更多相关《2022年JavaScript基础知识点归纳.docx(23页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、JavaScript基础学问点归纳 举荐 定义在函数外的变量肯定是全局变量;定义在函数内的变量,假如声明白var ,那该变量就是局部变量,假如不声明 var ,那么该变量就是全局变量;1、全局变量与局部变量JavaScriptvar global = Global; test ;function test var local = Local; document.writelnglobal; document.writelnlocal;document.writelnglobal; document.writelnlocal; 2、两种类型的Cookiei )长久性 cookie ,会被储备到客
2、户端的硬盘上;ii )回话 cookie :不会被储备到客户端的硬盘上,而是放在浏览器进程所处的内存当中,当浏览器关闭时就该回话cookie就销毁了;3、在 JavaScript中,函数( function)就是对象4、在 JavaScript中,没有方法(函数)重载的概念5、Function对象在 JavaScript 中有一个 Function 对象,全部自定义的函数都是 Function 对象类型的; Function 对象接受的全部参数都是字符串类型的,其中最终一个参数就是要执行的函数体,而前面的参数就是函数真正需要接受的参数;6、隐含的对象arguments在 JavaScript中
3、,每个函数都有一个隐含的对象arguments ,表示给函数实际传递的参数;arguments.length 就表示实际传递的参数的个数;7、函数名 .length每一个函数对象都有一个length属性,表示该函数期望 接 受 的 参 数 个 数 ; 它 与 函 数 的 arguments不 同 ;arguments.length表示函数实际接受的参数个数;8、JavaScript中有五种原始数据类型Undefined 、Null 、Boolean 、Number 以及 String;(留意:在 JavaScript中,没有 char 数据类型)Undefined数据类型的值只有一个:unde
4、fined;Null数据类型的值只有一个:null ;Boolean 数据类型的值有两个: true和 false;9、typeof运算符typeof是一元运算符, 后跟变量的名称, 用于猎取变量的数据类型, 其返回值有 5 个:undefined 、boolean 、number、string以及 object;10、在 JavaScript中,假如函数没有声明返回值,那么会返回 undefined11 、null与 undefined的关系undefined实际上是从 null派生出来的;例如:null与 undefined的关系JavaScript alertundefined = nu
5、ll;/ 浏览器返回 true11、强制类型转换在 JavaScript中 有 3种 强 制 类 型 转 换 : Boolean( value ), Number( value ), String( value );12、Object对象在 JavaScript中,全部对象都是从Object对象继承过来的;Object对象JavaScriptvar object = new Object ; forvar v in objectalertv;上面的代码中,浏览器并没有打印出什么,并不能说明Object对象不带有任何属性;下面代码测试Object对象中的属性是否可以枚举, 假如返回 false
6、,就说明 Object对象中的属性是不能枚举的;Object对象中的属性是不能枚举的JavaScript alertobject.propertyIsEnumerableprototype;浏览器弹出false对话框,就说明Object对象中的属性是不能枚举的;接下来我们再看看window 对象中的属性是否可以枚举的window 对象中的属性是可以枚举的JavaScriptfor var v in window console.logv;在 Chrome 浏览器中我们会看到浏览器调试掌握台中打印出一大堆属性,说明window 对象中的属性是可以枚举的;13、在 JavaScript中,可以动态
7、添加对象的属性,也可以动态删除对象的属性动态添加 / 删除对象的属性JavaScriptvar object = new Object ; alertobject.username;/undefinedobject.username = zhangsan; alertobject.username;/zhangsan objectpassword = 123; alertobject.password;/123delete object.username;/此时, username 属性已经被删除alertobject.username;14、JavaScript中定义对象最常见的方式定义对象
8、最常见的方式JavaScript var object = username:zhangsan, password:12345;alertobject.username; alertobject.password; 15、数组数组定义JavaScript/ 方法一var array = new Array ; array.push1;array.push2; array.push3; alertarray.length;/ 方法二(举荐)var array = 1,25,4; array.sort ; alertarray;调用数组的 sort ()方法,浏览器打印1, 25, 4,这并不是我
9、们期望的结果;对于 JavaScript 数组的 sort 方法来说,它会先将待排序的内容转换为字符串(调用 toString 方法),根据字符串的先后次序进行排序;以下方式可以得到我们期望的结果(按数组大小进行排序):数组排序JavaScriptfunction parenum1,num2 var temp1 = parseIntnum1; var temp2 = parseIntnum2;if temp1return -1; else if temp1 = temp2 return 0; else return 1;var array = 1,25,3; array.sortpare; a
10、lertarray;我们再用匿名函数的方式实现:匿名函数排序JavaScriptvar array = 1,25,3; array.sortfunctionnum1,num2var temp1 = parseIntnum1;var temp2 = parseIntnum2;if temp1return -1; else iftemp1 = temp2 return 0; else return 1;alertarray;16、JavaScript中定义对象的5 种方式( JavaScript 中没有类的概念,只有对象)i )基于已有对象扩充其属性和方法基于已有对象扩充其属性和方法JavaScr
11、iptvar object = new Object ;/ 添加 name属性object.name = zhangsan;/ 添加 sayName方法object.sayName = functionname this.name = name; alertthis.name;object.sayNamekyle;/调用 sayName 方法, name属性被修改为 kyle ,浏览器将打印 kyle最简洁的一种方式,使用起来并不便利,适合于暂时需要一个对象;ii )工厂方式创建对象不带参数的工厂方法:JavaScript/ 工厂方法function createObject var obje
12、ct = new Object ;/创建一个对象object.name = zhangsan;/为该对象添加一个name属性object.password = 123;/为该对象添加一个password 属性object.get= function /为该对象添加一个 get方法alertthis.name+,+this.password;return object;/返回该对象var object1 = createObject ;/调用 createObject工厂方法创建对象 object1var object2 = createObject ;/调用 createObject工厂方法创
13、建对象 object2object1.get ;/ 调用对象 get 方法object2.get ;/ 调用对象 get 方法带参数的工厂方法:JavaScriptfunction createObjectname,password var object = new Object ; object.name = name;object.password = password; object.get = function alertthis.name+,+this.password;return object;var object1 = createObjectzhangsan,123; var
14、 object2 = createObjectlisi,456; object1.get ;object2.get ;上面两种不带参数和带参数的工厂方法缺点:每创建一个对象,内存中就创建一个get 方法,比较铺张内存,且影响性能;而我们的期望是,创建两个不同的对象,它们的属性是不一样的,但方法是共用的;所以接下来我们需要改进 createObject工厂方法;改进的工厂方法:JavaScript function get alertthis.name+,+this.password;function createObjectname,password var object = new Obje
15、ct ;object.name = name; object.password = password; object.get = get;return object;var object1 = createObjectzhangsan,123; var object2 = createObjectlisi,456; object1.get ;object2.get ;将 get方法定义在 createObject函数外面,这样每创建一个对象, get方法都是共用的;让一个函数对象被多 个对象所共享,而不是每一个对象都拥有一个函数对象;iii )构造函数方式创建对象不带参数的构造函数: Java
16、Scriptfunction Person /在执行行代码前, js引擎会为我们生成一个对象this.name = zhangsan; this.password = 123; this.getInfo = function alertthis.name+,+this.password;/此处有一个隐含的 return语句,用于将之前生成的对象返回(也是跟工厂方式不一样的地方)var p1 = new Person ; p1.getInfo ;带参数的构造函数JavaScriptfunction Personname,password this.name = name; this.passwo
17、rd = password; this.getInfo = function alertthis.name+,+this.password;var p1 = new Personzhangsan,123; var p2 = new Personlisi,456; p1.getInfo ;p2.getInfo ;iv )原型( prototype)方式创建对象prototype是 Object对象里面的一个属性prototypeJavaScriptfunction Person Person.prototype.name = zhangsan; Person.prototype.password
18、 = 123; Person.prototype.getInfo = function alertthis.name+,+this.password;var p1 = new Person ; var p2 = new Person ;p1.name = kyle;/对象生成之后再去转变属性p1.getInfo ; p2.getInfo ;单纯地使用原型方式有两个问题:,你无法在构造函数中为属性赋初值,只能在对象生成之后再去转变属性值;prototype JavaScript function Person Person.prototype.name = new Array ; Person.
19、prototype.password = 123; Person.prototype.getInfo = function alertthis.name+,+this.password;var p1 = new Person ; var p2 = new Person ;p1.name.pushzhangsan; p1.name.pushlisi; p1.password = 456; p1.getInfo ;p2.getInfo浏览器将会打印: zhangsan , lisi, 456 和 zhangsan ,lisi, 123.假如使用原型方式创建对象,那么生成的全部对象会共享原型中的属性
20、,这样一个对象转变了该属性也会反应到其他对象当中;所以单纯地使用原型方式是不行的,仍需要结合其他方式;接下来我们会连续介绍;使用原型 +构造函数方式来定义对象JavaScriptfunction Person this.name = new Array ; this.password = 123;Person.prototype.getInfo = function alertthis.name+,+this.password;var p1 = new Person ; var p2 = new Person ;p1.name.pushzhangsan; p2.name.pushlisi; p
21、1.getInfo ;p2.getInfo ;使用原型 +构造函数方式来定义对象,对象之间的属性互不干扰,各个对象间共享同一个方法,这是一种比较好的方式;v)动态原型方式JavaScript function Person this.name = zhangsan; this.password = 123;iftypeof Person.flag = undefinedalertinvoked; Person.prototype.getInfo = function alertthis.name + , + this.password;Person.flag = true;var p1 = n
22、ew Person ; var p2 = new Person ; p1.getInfo ;p2.getInfo ;在动态原型方式中,在构造函数中通过标志量让全部对象共享一个方法,而每个对象拥有自己的属性;上面代码在次创建对象时,第一通过一个判定语句,看 flag 属性是否已经定义, 如没有定义, 就通过原型方式添加 getInfo 方法, 然后将 flag 设置为 true ,那么当其次次创建对象时, if 语句判定为假,跳过执行;这样就达到了我们所期望的结果,创建的对象属性是互不干扰的,而对象的方法是共享的;17、JavaScript中对象的继承( 5 种方式) 种方式 : 对象冒充冒充对
23、象继承JavaScript/ 父类function Parentusername this.username = username; this.sayHello = function alertthis.username;/ 子类function Childusername,password/下面三行代码是最关键的this.method = Parent; this.methodusername; delete this.method; this.password = password; this.sayWorld = function alertthis.password;var p = n
24、ew Parentzhangsan; var c = new Childlisi,123; p.sayHello ;c.sayHello ; c.sayWorld其次种方式 :call继承的其次种实现方式,call方法方式, call方法是Function对象中定义的方法, 因此我们定义的每个函数都拥有该方法; call方法的个参数会被传递给函数中的this, 从第 2 个参数开头,逐一赋给函数中的参数;call继承父类JavaScript function teststr alertthis.name+,+str;thisvar object = new Object ; object.na
25、me = zhangsan;/test.call相当于调用了 test函数test.callobject,html5war;/将 object赋给了接下来我们用call方式实现对象的继承JavaScript/ 父类function Parentusername this.username = username; this.sayHello = function alertthis.username;/ 子类function Childusername,password Parent.callthis,username;this.password = password; this.sayWorl
26、d = function alertthis.password;var p = new Parentzhangsan; var c = new Childlisi,123; p.sayHello ;c.sayHello ; c.sayWorld ;第三种方式 :applyapply继承父类JavaScript/ 父类function Parentusername this.username = username; this.sayHello = function alertthis.username;/ 子类function Childusername,passwordParent.apply
27、this,new Arrayusername; this.password = password; this.sayWorld = function alertthis.password;var p = new Parentzhangsan; var c = new Childlisi,123; p.sayHello ;c.sayHello ; c.sayWorld ;apply方法与 call方法很类似, apply方法也是定义在Function对象中的方法, 因此我们定义的每个函数都拥有该方法;apply方 法 与 call方 法 有 一 个 区 别 : Parent.applythis,
28、new Arrayusername;传递的其次个参数为一个数组,而call方法传递的是一些离散的数据参 数;这两个方法并不能说谁好谁坏,要看详细使用场景;第四种方式 : 原型链方式(无法给构造函数传递参数)原型链继承JavaScript function Parent Parent.prototype.hello = hello; Parent.prototype.sayHello = function alertthis.hello;function ChildChild.prototype = new Parent ; Child.prototype.world = world; Chil
29、d.prototype.sayWorld = function alertthis.world;var c = new Child ; c.sayHello ; c.sayWorld ;单纯使用原型链方式的缺点:没有方法传递参数,只有等对象创建完之后再去修改;我们接下来结合其它的方式解决这个问题;第五种方式 : 混合方式 举荐 使用混合方式实现对象的继承JavaScriptfunction Parenthello this.hello = hello;Parent.prototype.sayHello = function alertthis.hello;function Childhello,world Parent.callthis,hello; this.world = world;Child.prototype = new Parent ; Child.prototype.sayWorld = function alertthis.world;var c = new Childhello,world; c.sayHello ;c.sayWorld ;以上这篇 JavaScript基础学问点归纳 举荐 就是共享给大家的全部内容了,期望能给大家一个参考
限制150内