你好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 

猜你喜欢

转载自www.cnblogs.com/zqm0924/p/13173224.html
今日推荐