你好javascript day16

1)正则表达式

对于正则表达式的深度使用封装两个class设置删除的函数方法

//添加class类名
function  addClass(elem,className){
let arr=elem.className.match(/\s+/g);
let newArr=className.match(/\s+/g);
newArr.forEach((item)=>{
if (arr.indexOf(item)!==-1)  arr.push(item);
});
elem.className=arr.join("");
}

//删除class类名
function  removeClass(elem,className){
let arr=elem.className.match(/\s+/g);
let newArr=elem.className(/\s+/g);
arr=arr.fitler((item)=>{
return  newArr.indexOf(item)=== -1;
});
elem.className=arr.join("");
}

常用正则验证

 

用户名

/^\w{8,16}$/

邮箱验证

/^\w{5,}\@[a-zA-Z0-9]{2,}\.(com|net|org)(\.cn)?$/

电话号码

/^1\d{10}$/

网址验证

/^https?:\/\/www\.\w+\w+$/

 

表单验证

//结构  
  <form action="http://www.163.com" method="GET">
        <input type="text"><span></span><br>
        <input type="text"><span></span><br>
        <input type="text"><span></span><br>
        <input type="submit">
    </form>

//js部分
<script>
let form=document.querySelector("form");
let list=Array.form(document.getElemmentsByTagName("input"));
list.pop();
let arr=[];
for(let i=0;i<list.length;i<++){
arr.push(false);
}
form.addEventListener("submit",formHandler);
form.addEventListener("input",formHandler);

function formHandler(e){
if(e.type==="input"){
let index=list.indexOf(e.target);
let bool=getVerify(index,e.target.value);
if(bool){
e.target.nextElementSibling.textContent="正确的";
e.target.nextElementSibling.style.color="green";
}else{
e.target.nextElementSibling.textContent="错误的";
e.target.nextElementSibling.style.color="red";
}
arr[index]=bool;
}else if(e.type==="submit"&&arr.indexOf(false)===-1){
}else{
e.preventDefault();
console.log("请输入正确再提交");
}
}

function  getVerify(index,value){
switch(index){
case 0:
return /^\w{8,16}$/.test(value);
case 1:
return /^(?=\D+\d)(?=.*[a-z])(?=.*[A-Z])[A-Za-z0-9]{8,16}$/.test(value);
case 2:
return /^1\d{10}$/.test(value);
}
}
</script>

 2)ES6基础

 

严格模式

"use  strict";

任何变量都必须先声明,不能直接使用

a=4;//报错

let a=4;//true·

 

函数参数名不能重复

function fn(a,a){

console.log(a,a);

}

fn(3,5);//输出55   前一个会被后面的覆盖

 

不允许使用with

let div=document.querySelector("div");

with(div,style){

width:"50px";

height:"50px";

backgroundColor="blue";

};//报错

 

字符长度只读不可以改

let str="dfsds";

str.length=5;报错

 

不允许使用八进制

let a=067;//报错

 

删除属性,会将obj的键删除,相对的值也会被删除

let obj={

a:1,

b:2

};

delete obj.a;

console.log(obj);

 

不能删除固有属性和不可删除属性

let arr=[1,2,3];

delete.arr.length;

console.log(arr);

 

不允许使用eval

eval映射

let a=3;

let b=4;

console.log(eval("a+b"));//正常输出==》7   严格模式报错

 

eval映射使用

let obj0={};

let obj1={};

let obj2={};

for(let i=0;i<4;i++){

eval("obj"+i).a=10*i;

}

console.log(obj0,obj1,obj2,obj3);

 

函数内注意问题

function  fn(){

//不能使用

console.log(arguments.callee);

console.log(arguments.callee.caller);

}

 

function fn(){

//如果没有开启严格模式,在函数中this是window

//但是开启严格模式后,函数内this就会变成undefined

//全局的函数内尽量不要使用this

console.log(this);

}

fn();

 

 

其他

增加保留字

比如protected   static    interface

定义变量时不能使用

 

 

 

3)let和const和箭头函数

var  过时了

let   es6新出

var还能使用,而且和let混着用

let是有作用域的

let  定义的全局变量都不会放在window下作为属性,解决与window对象的属性冲突问题

let  a=3;

console.log(window.a);

function fn(){

let a=3;

console.log(window.a);

}

fn();//输出两次undefined

 

所有写在{}内的let变量他的作用域仅属于{}内,外部是无法调用的

let a=3;

if(a>0){

let b=10;

a+=b;

};//报错

console.log(a,b);

 

{}内嵌套,内部可以使用外部let定义的变量

for(let i=0;i<10;i++){

if(i>5){

let c=10;

i+=c;

}

console.log(i);//正常输出

}

 

常量不允许被修改

const  EVENT_ID="10086";

EVENT_ID="10010";//报错

 

一般作为初始值,或者永远不需要改的值来使用。

目的是为了阻止因为其他使用者改变该值,或者自己不小心改变

常量定义时,必须全部字母大写,用下划线区分

 

Math.SQRT1_2

Math.LOG10E

 

const obj={

a:1,

b:2

};

obj=null;

如果定义的对象为常量将不能被删除

这样写害怕用户改变对象的引用关系

因为太多,而且快速开发,也完全不遵守代码规范

const obj={a:1};

obj={b:2};//报错

 

 

箭头函数

let fn=()=>{}

let fn=function(){}

这两一样的

 

数组函数方法转箭头

arr=arr.filter(item=>item>2);

arr=arr.filter(function(item){return item>2});

 

arr.sort((a,b)=>a-b);

arr.sort(function(a,b){return  a-b});

 

函数的参数,如果没有参数,或者有两个及以上的参数,需要写()将参数放入

()=>{}

如果函数只有一个参数,不要加();

item=>{}

 

=> 参数和函数体区分,意思是将参数带入到函数中

{} 函数语句块

如果函数语句块不加{}  并且只有一句话,就意味着使用return  返回这句话

 

箭头函数都是匿名函数

多用于回调函数

setInterval(()=>{},16);

setTimeout(()=>{},16);

arr.reduce((value,item)=>value+item);

elem.addEventListener("click",e=>{});

 

箭头语法可以改变箭头语法函数内this的指向

let  obj={

color:"blue",

init:function(){

let div=document.querySelector("div");

div.a=this;

div.addEventListener("click",clickHandler);

},

clickHandler(e){

console.log("aaa");//点击后输出aaa

//事件函数中this是指侦听的对象本身

console.log(this.a.color);//输出blue

}

}

 

对象的函数中

this是当前对象

 

事件函数中

this是侦听事件的对象

 

回调函数

this是window

 

箭头函数中的this

箭头函数外的this 

 

posted @ 2020-06-21 17:26  cruor  阅读(114)  评论(0编辑  收藏  举报