第一天:正则对象

1.正则表达式:// :定义字符串的使用规则,使用场景在表单验证,字符串的replace,split

2.正则简单使用:表达式:关键字原文 "no" : /no/ig;         i:忽略大小写    g:全部(global)全局

3.备选字符集:/[ ··· ]/;正则只要满足了,就不管后续操作;解决方法:

1.一个[  ]只会管一个字符, 

2.前加^;后加$,里面的类容就需要从头到尾完全满足我们的要求;一般用在表单验证

3.    连续的字符串可省略中间的字,0-9,a-z,A-Z ;等·····

4.预定义字符集:前辈们定义好的

1.数字:\d;

2.字母,数字,下划线:\w

3.空字符:\s,包括了空格,换行,tab制表符

4.量词:规定一个字符集出现的次数

1.明确数量:

1.{m,n}:表示最少m个,最多n个;

2.{m,}:表示最少m个,多了不限

3.{m}:表示只能是m个;

2.没有明确的数量:

1.? :表示可有可无,最多一次

2. *  :表示可有可无,多了不限

3.+  :表示最少一次,多了不限

5.选择和分组:

1.选择:在多个规则中选一:规则1 | 规则2

2.分组:将多个字符集组成一个子规则,(规则1 | 规则2)

6.预判公式:

1.(?![] + $)[中间放着不需要的字符集];

7.字符串中支持正则的API

1.切割:var arr=str.split(str/reg);

2.替换:
1、基础:

 str.replace(/reg/g,"新内容")

2、高级:
         str=str.replace(/[关键字1][关键字2]+/g,

         function(a,b,c){
         a正则匹配到的关键字
         b正则匹配到的关键字的下标
         c是原文
         return a.length==2?"**":"***";
         });
3、格式化:
            str=str.replace(/(\d{6})(\d{4})(\d{2})(\d{2})(\d{4})/,function(a,b,c,d,e,f,g,h){
            在replace的时候,正则出现了分组,
            在形参a的后面就会出现n个形参,具体看你有多少个分组,最后肯定有两个前一个代表下标,后一个代表原文
            第一个分组获得的内容会保存在第二个形参中
            第二个分组获得的内容会保存在第三个形参中
            return b+"年"+c+"月"+d+"日";
          })

8.正则的创建方式:

1.直接量:var reg = /正则/后缀;

2.构造函数:var reg = new RegExp("正则","后缀");

第二天:数学对象

1.Math:对象:专门提供数学计算的Api

1.取整Api:

1.上取整:var num1=Math.ceil(number);

2.下取整:var num2= Math.floor(number);

3.四舍五入:var num3=Math.round(number);

2.乘方和开方:

1.乘方:var num1=Math.pow(底数,幂数);

2.开方:var num2=Math.sqrt(number);

3.最大值和最小值:

1.var max/min=Math.max/min(x,y,z):xyz为数字:该方法不支持数组:解决方法

var var max/min=Math.max/min. apply(Math. arr);

4.绝对值:Math.abs(number);

5.*****随机数:Math.random():在0-1之间取一个小数,但取不到最大值;

公式:parentint(Math. random()*(max-min+1)+min);

第三天:日期对象,错误对象

1.日期的创建方式:五种

1.创建当前日期:var newdate=new Date();

2.创建自定义日期:var time=new Date(xxx - xx - xx h:m:s);

3.复制时间:var now=new Date(start);日期对象都是直接修改原数组的;

2.日期的操作API:

1.日期可以相减,获得的是一个毫秒差:

2.日期的分量:时间单位:Fullyear,Month,Date,Day,Hours,Minute,seconds,

3.每一对分量都有get和set方法:Day(星期)没有;

4.Month的取值范围:0-11;Date的范围:0-31

5.格式化转为字符串:var str= date. tolocalestring();

3.四种错误对象:

1.语法错误:SyntaxError:符号,语法错误

2.引用错误:ReferenceErroe:没有创建就使用;

3.类型错误:typeError:方法用错了;

4.范围错误:rangeerror:num. tofixed(n),这里的n只能在0-100之间;

第四天:函数-结束,面向对象开始

1.函数的重载(overload):相同的函数名,根据传入的实参不同,选着不同的执行结果

1.函数内部有一个arguments对象,该对象在函数调用时内部创建,一个类数组,专门接受传入的实参;

作用:可根据arguments类数组的长度不同:执行不同的操作,可不写实参

2.匿名函数:即没有名字的函数,使用一次自动释放

1.匿名函数的自调:(function ( ) {  代码  }  ( ):以后的代码可以写在 “代码” 中,自动释放内存

2.匿名函数的回调:匿名函数 ,不是自调就是回调,像数组排序的API: sort()  以及 字符串的替换API:replace   和绑定函数

3.函数的闭包:

1.函数的执行原理:

0.在函数执行前,会创建一个执行环境栈,保存函数调用顺序的数组,首先压入全局执行环境(全局EC),全局EC引用着全局window,window中保存着全局变量

1.定义函数时,创建函数对象,在对象中定义作用域属性(scope),记录函数来自的作用域,全局函数的作用域是window

2.函数调用前,压入新的函数的EC,创建函数的活动对象AO,保存着该函数的局部变量,函数EC中添加scope chain 属性引用着AO,设置AO的parent属性为函数的scope引用对象

3.调用时优先使用自己的,没有再顺着作用域链去找,最后是全局window

4.调用完:EC会自动出栈,AO自动释放

2.闭包:想创建一个受保护的局部变量,可以兼容全局变量和局部变量的优点,实现方法如下

1.两个函数的嵌套

2.创建一个受保护的变量;

3.外层函数return 出内层函数,

4.内层函数引用着受保护的变量;

3.闭包使用场景:一般用在防抖和节流中:mousemove事件,input事件,resize事件(window可用);

4.闭包防抖节流使用公式:function   bb()  {

var xx;//创建一个未赋值的变量

return function (){

if(xx){clearTimeout(xx)}

xx=settimeout(function (){ 操作 },1000)

}

}

var event=bb();

elms.onclick=function(){  event();  }

4.面向对象:开发方式:一是面向过程,二是面向对象,面向对象的三大特点:1.封装    2.继承    3.多态

1.封装:即创建Object的方法

1.直接量方式:var obj={    "属性" :属性值,"方法名" :function(){},   }。js的对象底层都是哈希数组

2.访问对象的属性和方法:obj. 属性名(方法名) obj[ "属性名"("方法名")]();在对象中使用自己的属性必须用:this

3.this的指向问题:

1.单个元素绑定事件,this指向该元素

2.多个元素绑定事件,this指向当前元素

3.函数中的this,谁调用了此函数,this就指向谁

4.定时器中的this,永远指向window

5.构造函数中的this,指向当前创建的函数

4.自定义构造函数的方式创建对象:

function obj (){  形参1,形参2,····  }{  

this. 形参1=形参1;

this. 形参2=形参2;

````````````````````````

}

var newobj=new obj(形参);

第五天:Object的继承特性

 

继承:就是父对象的方法和属性,子对象页可以用

1.找原型的方法:1.对象名.__proto__;//必须是对象才可用         2.构造函数名.  prototype;//除了Math,其他对象都有

2.最顶层的对象是 Object 的原型;

3.判断自有还是共有:

if(obj. hasOwnprototype("属性名")){

log(“自有”)

}else{

if(obj. hasOwnprototype("属性名")===false  &&  "属性名" in obj){

         log(“共有”)  }

else{      log(“没有”)        }

}

4.删除修改 自有 或  共有:

1.删除自有:delete   obj. 属性名(方法名)             修改就是重新赋值

2.删除共有:delete   obj.prototype.属性名(方法名)              修改也是重新赋值

5.判断xx是不是一个  数组  或  其他对象

1.Array.prototype.isprototypeof(xx):true->是数组,否则不是

2. xx instanceof Array;            true->是数组

3.Array.isArray(xx); - ES5新提供:老IE都不支持;

4.对象的字符串形式
           Object的原型上有原始的toString方法
           原始的toString方法,默认输出 - [object Object]
           多态:同一个函数名拥有多种形态
           方法:借用:if(Object.prototype.toString.apply(x)==="[object Array]"){数组}

6.实现自定义继承:

1.两个对象之间的方法:子对象. __proto__=原型对象;

2.多个对象认父:先设置关系,在来构造对象