3.js是一门脚本语言、解释性语言,基于对象、是一门弱性语言。
12,点击事件
13,innerText获取文本内容innerHTML元素的所有节点(包括标签等都可以获取)4,根据标签名获取元素获取元素为伪数组拥有length属性,(索引为非负整数)不具有数组所具有的方法伪数组,就是像数组一样有length属性,也有0、1、2、3等属性的对象,看起来就像数组一样,但不是数组document.getElementsByTagName("标签的名字")5,事件中的this当在事件中表示当前元素的时候,可以使用this6.dom操作页面元素的。7.dom树
1varstr='2020-06-23';2varreg=/(\d{4})\-(\d{2})\-(\d{2})/;//分组提取3//console.log(reg.test(str));4if(reg.test(str)){5console.log(RegExp.$3)6}RegExp(正则)144.
1varstr='zs:1000,lisi:500,wangwu:2000';2vararr=str.match(/\d+/g);3console.log(arr)match匹配提取内容145.varreg3=/[a\-Z]/g;console.log(reg3.test(str3))//Rangeoutoforderincharacterclass字符类中的"范围违背了character类"在里边加一个转义字符\就行。146.阻止锚点跳转:JavaScript:;147.name属性:只有input有这个属性。149.获取当前屏幕滚动条的距离:document.documentElement.scrollTopdocument.body.scrollTop-=step150[...newSet([1,1,1,2,2,3])]的返回值是去重的数组。151.functionaddEvent(obj,type,fn){obj.addEventListener(type,fn,false);}addEvent(window,'scroll',function(){console.log(456)})addEvent(window,'scroll',function(){console.log(789)})dom二级事件绑定onscroll事件。
50.补充:必须要加var不加var就会产生变量污染,一定要避免。隐式全局变量vara=5,b=5,c=9b和c是隐式全局变量vara=b=c=20//b和c就是隐式全局变量对象51.引用类型中的其中一个{}52.语法:{一个个的键值对},必须写逗号。53.this:在事件函数中,this指向的是事件源。在构造函数中,this指向的是构造函数的实例化对象。在普通函数中,this指向的是window对象。在对象函数中,this指向的是当前的对象。定时器函数指向window数组的元素是函数指向该数组原型中this指向实例化对象自执行函数中this指向window54.对象遍历:for…infor(varxinobject){}55.对象中的属性只能有一个,新增如果有的话就是覆盖。56.对象属性的删除:delete关键字第五章JavaScript内置对象
扩展知识57.引用类型与基本类型数据的区别:引用数据类型按址传递,基本数据类型按值传递58.短路写法:vara=1||null哪个是true去哪个的值,如果两个都是false呢,取后面这个(后面会用于解决浏览器兼容性问题)基本包装类型59.字符串创建的形式:字面量和构造函数newString()60.Number的创建:字面量和构造newNumber()61.booleanstring
原型类问题//接下来的每一句话都是规定,不要问我为什么//1、所有的函数数据类型(实名函数、匿名函数、类)都天生自带一个属性:prototype(原型),并且这个属性对应的属性值是一个对象数据类型的,浏览器会默认的给它开辟一个堆内存//函数原型的作用:存储类中所有公有的属性和方法
//2、在浏览器默认给prototype开辟的堆内存中有一个天生自带的属性constructor,存储的值是当前函数本身//console.log(CreateJsPerson.prototype.constructor===CreateJsPerson);//-->true
//4、查找过程-->原型链模式//每一个实例在使用自己的属性和方法的时候,首先先找自己的私有属性,私有属性中存在就不在查找了,我们使用的就是私有的属性和方法;私有的如果不存在,浏览器默认根据__proto__找所属类prototype上的公有的属性和方法,如果公有中存在,则使用公有的;如果公有的还没有,则继续同过__proto__往上找,一直找到Object.prototype为止;//关于this的查找问题//1、Fn这个类中this.xxx=xxx中的this是当前Fn的一个实例//2、Fn类中某些方法中的this(例如:sum这个公共方法中的this)//1)首先看sum这个方法执行前有没".","."前面是谁,那么sum中的this就是谁//2)执行sum中的代码,然后把this是谁用代码给描述出来//3)按照原型的查找机制分析结果即可以下{}括号中的内容对应的是上面的关于this的查找问题{functionFn(){//this-->fthis.index=100;}Fn.prototype.sum=function(){console.log(this.index);};varf=newFn;f.sum();//this->f//console.log(f.index);-->100
f.__proto__.sum();//this->f.__proto__//console.log(f.__proto__.index);-->原型上没有index属性,则往上一级查找,直到找到Object的原型为止-->undefined
Fn.prototype.sum();//this->Fn.prototype//console.log(Fn.prototype.index);和上面的情况一样,是直接的查找原型上的index-->undefined
//f.__proto__.__proto__.sum();//UncaughtTypeError:f.__proto__.__proto__.sumisnotafunction}
//构造函数模式和工厂模式的区别://一般情况下,我们如果是通过构造函数模式来创建一个类的话,我们的类名的第一个字母要大写(这不是规范而是大家约定俗称的一个规律)//1)在执行的时候,我们的构造函数模式是通过newCreateJsPerson()来执行的-->我们把CreateJsPerson称之为一个类,而通过类创建出来的结果(p1)就是当前类的一个实例//2)类也是一个函数,所以也会像普通函数执行一样:形成一个私有的所用域,形参赋值,预解释,代码从上到下执行//但是构造函数模式在代码执行之前,浏览器默认首先会创建一个对象数据类型的值(不用自己手动的进行创建了),并且会默认的把这个对象数据类型的值进行返回(不用自己手动的return返回了)//3)把浏览器默认创建的那个对象当做当前函数执行的整体(this),然后通过this.xxx=xxx这种方式给默认创建的对象增加属性名和属性值//浏览器默认创建的这个对象其实就是我们当前类的一个实例//在构造函数模式创建一个类的时候,方法执行,里面的this(this.xxx=xxx)其实就是我们当前类的一个实例-->this的第四种情况
//1)函数中出现的私有变量都是把它看做普通函数执行的时候产生的,和我们的当前的实例(p1/p2)是没有任何的关系的,也就是p1/p2并没有num这个属性,只有this.xxx=xxx这样设置添加的才是我们实例的私有属性//2)不需要写return,浏览器也会把创建的实例进行返回(浏览器默认返回的是一个对象数据类型),但是如果我自己写了呢//自己手动返回一个基本数据类型值:对我们创建的实例是没有任何的影响的//return12;//自己手动返回一个引用数据类型值:会把浏览器默认返回的实例覆盖掉,那么此时我们创建出来的p1/p2就不在是CreateJsPerson这个类的一个实例了//3)如果在创建的时候不需要给形参传递值,后面的小括号可以加也可以不加//newCreateJsPerson();//newCreateJsPerson;//4)如何的检测某一个实例是否属于这个类-->instanceof//所有的对象数据类型({}、[]、/^$/、Date还有我们的实例也是对象数据类型)都是Object这个类的一个实例-->Object是所有对象数据类型的基类//5)hasOwnProperty:检测某一个属性是否为当前的对象的私有属性(不管公有属性是否存在,只要私有中有就返回true,没有就返回false)//in:用来检测某一个属性是否属于这个对象(既可以检测私有的,也可以检测公有的)