js笔记

2017-08-22  本文已影响0人  塔库纳玛哈哈

js简介

Js是一种基于事件和对象驱动的解释性、松散性的语言。

一切皆对象

javascript 布兰登艾奇 创建

ECMAscript
js的作用

变量、常量

变量是计算机内存里的一块地址单元

基础数据类型

number 数值类型
boolean
null(本身是一个空对象)
undefined
symbol

引用数据类型

function函数
object对象
array数组

数组就是一系列有直接或者是间接联系的数据的集合

console.log(arr.length);

console.log(arr['length']);

console.log(arr[arr.length-1]);

运算符

算数运算符

逻辑运算符

比较运算符

(ASCII码------美国标准信息交换码;

EASCII码————欧洲扩展的;

GB2312码—————中国制定的;

GBK码

unicode码——国际规定的----UTF-8)

7.流程控制


团队

1.确定自己的需求是否和团队一致

2.提高自己的能力

3.德行

4.信任

函数function

将实现某一特定功能的代码块,封装起来以便重复使用

函数定义方式

函数调用

var fun=function(){
    代码块;
}
fun();

函数参数

var fun=function(形式参数,形式参数){
    代码块;
}
fun(实际参数,实际参数);
//形式参数的作用就是为了接收实际参数;
//形式参数和实际参数的个数可以不同
//形式参数和时机蚕食对应一一赋值
//没有传值的形式参数默认是undefined
//所有的时机参数会被arguments集合接收

例子:

    function fun(arr){
        for(var i=0;i<arr.length;i++){
            for(var j=i+1;j<arr.length;j++){
                if(arr[i]<arr[j]){
                    var tem=arr[i];
                    arr[i]=arr[j];
                    arr[j]=tem;
                }
            }
        }
        console.log(arr);
    }
    fun([1,445,23,44,56]);

函数的返回值

​ return;

函数的作用域

js运行依赖于浏览器,浏览器是js的宿主环境

执行环境

全局环境

定义在全局环境中的变量、函数,称为全局变量

局部环境

定义在局部环境中的变量、函数,称为局部变量

作用域

变量在某个范围内有意义

var nub=200;
function aa(){
    nub=300;
  function bb(){
      nub=400;
    consoloe.log(nub);
  }
  bb();
  console.log(nub);
}
aa();
console.log(nub);

结果为:400
400
400;

回调函数

当一个函数作为另外一个函数的参数的时候,这个函数就是回调函数

function fun(m,n,nub){
  nub(m,n);
}
fun(1,2,function(a,b){
  
});

递归函数

函数自己调用自己

例子1:求5的阶乘 5*4!

function jiecheng(n){
    if(n==0){
         return 1;
       }
  return n*jiecheng(n-1);
}
console.log(jiecheng(5));

例子2: 1 2 3 5 8 13 21 44 …….n,求n等于多少

​ 斐波那契数列

​ n=(n-1)+(n-2)

function fun(n){
    if(n==1){
         return 1;
       }
    if(n==2){
         return 2;
       }
    return fun(n-1)+fun(n-2);
}
console.log(fun(7));

例子3:把数组里面的元素拷贝到一个新的数组


闭包

当一个函数嵌套另外一个函数,在内部函数中使用了外部的局部变量,在外部去访问内部函数的时候,就形成了闭包

闭包的作用:保存局部变量

function aa(){
    var nub=200;
  function bb(){
      console.log(nub);
  }
  return bb();
}
var fun=aa();
console.log(fun);

预解析

在程序真正开始运行之前,js会将以var声明的变量和以function关键字声明的函数,提前加载到相对应的环境里面

fun();
var fun=function(){
    console.log(1);
}
结果是报错,因为var声明的变量会提前解析但为赋值

fun();
function fun(){
    console.log(1);
}   
结果为1;

垃圾处理机制

1.当一个函数运行结束以后,局部变量会被删除

2.当一个对象不再被引用的时候,这个对象将在某一个时刻被删除

函数重载

内置顶层函数

1.Number

2.String

3.Boolean

4.parseInt( ); 将字符串转化为整数(必须是数字开头的)

5.parseFloat( ); 将字符串转化为小数(必须是数字开头的)

6.isNaN(); 是 不是一个数字

console.log(Number(true));    值为1

null==undefined 为真

null==false 为假

对象

面向对象

面向对象的编程方式

研究的一切事物都是对象

class 类是对象的抽象

​ 对象是类的实例化;

键值对

以json格式去创建对象

var obj={
    name:
}

以构造函数的方式去创建对象

提供对象的初始化

function person(name,age){
    this.name=name;
    this.age=age;
}
var xiaoming=new person('xiaoming',18);
var xiaohua=new person('xiaohua',20);
console.log(xiaoming,xiaohua);

结果
person {name: "xiaoming", age: 18}
person {name: "xiaoming", age: 18}

通过object的方式创建对象

任何一个对象都可以看作是object方式创建而来的

var obj=new Object();

instanceof 用来检测某一个对象是否是某一个构造函数的实例化

对象的继承

prototype

每一个函数都有prototype属性

prototype的值为对象

function Person(name,age){
    this.name=name;
    this.age=age;
}
Person.prototype.fun=function(){
    console.log(1);
};
console.log(Person.prototype.fun());

new

new 发生了三件事

创建一个空对象 obj

obj_proto_==Person.prototype

Person.call(obj);

继承链

继承链(原型继承链)

var obj=new Person();
obj.__proto__=Person.prtotype
Person.prototype._proto_=Object.prototype
Objcet.prototype.__proto__==null;

this指针

谁调用这个函数,this指向谁

call方法

每个call里面的第一个参数就决定了this指针指向谁

fun.apply(obj,'lisi',18);      //第一个参数:实例化对象;第二、三个参数:传值

apply方法

每个call里面的第一个参数就决定了this指针指向谁,第二个参数以后的传值方式与call方法不同

fun.apply(obj,['lisi',18]);     //第一个参数:实例化对象;第二、三个参数:传值(传值时需要加方括号)

obj=null

删除一个对象

obj=null;

delete

用来删除某一个对象的属性

delete obj.name;

宿主对象(浏览器对象)

window对象

内置对象

数组对象

arr.push();

push()——在数组的尾部添加一个或多个元素,并返回数组新的长度,修改原始数组

arr.pop();

pop()——在数组的尾部删除一个元素,并返回弹出的元素值,修改原始数组

arr.unshift();

unshift()——在数组的头部添加,返回新的数组长度,修改原始数组

arr.shift();

shift()——在数组的头部删除,返回删除的数组元素,修改原始数组

arr.slice();

slice()——对数组进行分离,并返回一个子数组。不修改原始数组

arr.splice();

splice()——从数组中删除和插入一些元素。修改原始数组

let a = [1,2,3,4,5,6,7,8];
a.splice(4);                // 返回[5,6,7,8],a是[1,2,3,4]
a.splice(1,2);              // 返回[2,3],a是[1,4]
a.splice(1,1);              // 返回[4],a是[1]

let b = [1,2,3,4,5];
a.splice(2,0, "a", "b");    // 返回[],a是[1,2, "a","b", 3,4,5]
a.splice(2,2, [1,2], 3);    // 返回["a", "b"],a是[1,2, [1,2],3, 3,4,5]
arr.concat();

concat()——创建并返回一个新数组。不修改原始数组

let a = [1,2,3];
a.concat(4, 5);         // 返回[1,2,3,4,5]
a.concat([4,5]);        // 返回[1,2,3,4,5]
a.concat([4,5],[6,7]);  // 返回[1,2,3,4,5,6,7]
a.concat(4, [5, [6,7]]);// 返回[1,2,3,4,5,[6,7]]
a.join();               // "1,2,3",原始值不发生改变
arr.join();

join()——将数组中的所有元素转化为字符串并连接在一起,返回最后生成的字符串。不修改原始数组

let a = [1, 2, 3];
a.join();               // => "1,2,3",默认使用","隔开元素
a.join("&");            // => "1&2&3",指定分隔符
arr.reverse();

reverse()——将数组中的元素逆序,返回逆序后的数组。修改原始数组

let a = [1, 2, 3];
a.reverse().join();     // => "3,2,1",此时的a是[3, 2, 1]    
arr.some();

some()——方法为数组的每个元素调用指定的函数,并返回true或false。当有一个调用返回true时,some()就会返回true;只有当所有调用都是false时,some()才返回false

let a = [1,2,3,4,5];
a.every(function(x) { return x < 10; });    // => true,所有的值<10
a.every(function(x) { return x % 2 === 0}); // => false,不是所有的值都是偶数
a.some(function(x) { return x % 2 === 0; }) // => true,a含有偶数值
arr.every();

every()——方法为数组的每个元素调用指定的函数,并返回true或false。当有一个调用返回false时,every()就会返回false;只有当所有调用都是true时,every()才返回true

arr.find();
arr.findIndex();
arr.map();

map()——方法为数组的每个元素调用指定的函数,并返回一个新数组,返回什么值,形成什么样的集合;

arr.filter();

filter()——方法为数组的每个元素调用指定的函数,并返回筛选出的新数组,对原数组没有影响

a = [5,4,3,2,1];
smallvalues = a.filter(function(x) { return x < 3; });  
// smallvalues是[2, 1]
arr.Foreach();

forEach()——方法从头至尾遍历数组,为每个元素调用指定的函数

arr.sort();
arr.includes();
arr.toString();

toString()——返回一个字符串

[1,2,3].toString();         // "1,2,3"
[1, [2, "c"]].toString();   // "1,2,c"

arr.reduce();

reduce()——对数组的元素对调用指定的函数,并返回最终生成的单个值

let a   = [1,2,3,4,5];
let sum = a.reduce(function(x,y) { return x+y; }, 0);       //15
let max = a.reduce(function(x,y) { return (x>y)?x:y; });    // 5
arr.indexOf();

indexOf()——搜索整个数组中给定值的元素,返回找到的第1个元素的索引,如果找不到,则返回-1

字符串对象

charAt();
charCodeAt();
fromCharCode();
indexOf();
lastIndexOf();
split();
slice();
substr();
substring();
concat();
endsWith();
includes();
replace();
startsWith();
toUpperCase();
toLowerCase();
trim();
trimLeft();
trimRight();

数学对象

Math.abs();

返回 x 的绝对值

Math.ceil();

返回大于等于 x 的最小整数

Math.cos();

返回 x 的余弦

Math.sin();

返回 x 的正弦

Math.tan();

返回 x 的正切

Math.floor();

返回小于等于 x 的最大整数

Math.max();
Math.min();
Math.PI();
Math.pow();
Math.random();
Math.round();
Math.sqrt();
Math.trunc();

干什么的,怎么用(参数),返回值是什么,对原对象有无影响

console.dir();     //可以查看这个对象的结构;
console.log();     //可以查看这个对象的输出值;

获取屏幕宽度、高度

var width=document.documentElement.clientWidth;
var height=document.documentElement.clientHeight;

递归拷贝

拷贝数组

浅拷贝
var arr=[1,2,33,[1,6,8]];       //只拷贝[1,2,33,[]]   到二维以上的数组里面的内容都无法拷贝到
深拷贝
function copy(arr,brr){
    for(var i=0;i<arr.length;i++){
        if(arr[i] instanceof Array){
            brr[i]=[];
           copy(arr[i],brr[i]);
        }
        else{
            brr.push(arr[i]);
        }
    }
}
var brr=[];
copy([1,2,['a','b']],brr);
console.log(brr);           //结果为[1,2,['a','b']]

拷贝对象

对象的遍历

Bom

浏览器对象模型

window 顶层对象

location 地址栏

history 历史记录

document 文档

window

confirm

弹出一个是否确定的弹框

window.screen

获取屏幕的宽高

window.screen.width 获取屏幕的宽

window.screen.height 获取屏幕的高

window方法

时间函数

setInterval
setInterval(function(){     //回调函数
    console.log(1);
},1000);        //1000的单位为毫秒    1秒==1000毫秒
clearInterval
setTimeout();
clearTimeout();

location地址栏

Tcp/Ip协议:顶层协议

http://应用层协议

http:// www.baidu.com :80 /aa/bb/index.html ?查询字符串

协议 主机地址 端口号port 页面路径 查询字符串 锚地址

protocol hostname host主机+端口 pathname search hash

网络传输协议

超文本传输协议

location属性

location方法

reload();

重载

reload(true);加载所有缓存

reload(false);不加载缓存

assign();

加载到页面 会留下历史记录

assign();

assign(false);

replace();

替换到页面 不会留下历史记录

history历史记录

history属性

history方法

history.forword

转向下一个页面

与浏览器的点击向前按钮功能一样

history.back

转向上一个页面

与浏览器的点击后退按钮功能一样

history.go(0);

当前页面刷新

Dom

文档对象模型

Document

Document方法

Document.title

Document.documentElement.clientWidth

Document.documentElement.clientHeight

元素的获取方法(旧)

Document.getElementsByTagName();

收到的是一个集合

Document.getElementsByClassName();

收到的是一个集合

在IE浏览器里面不支持ByClassName获取类名的方式

Document.getElementById();

收到的是一个元素

只能用document调用

Document.getElementsByName();

收到的是一个集合

只能用document调用

元素的获取方法(新)

document.querySelector();

默认是选取元素的第一个

document.querySelectorAll();

可以选取到这个元素所有的

事件(初试)

鼠标

click;

dbclick;

mousemove

mousedown

mouseup

mouseover

mouseout

mouseenter

mouseleave

键盘

keydown

keypress 键盘按住

keyup

表单元素

blur 失去焦点

focus 获取焦点

submit 提交

reset 重置

change 改变

dom操作

对元素内容

innerHTML可以获取到标签对

innerText只获取文本

对元素样式css

操作属性

getAttribute('')

标准属性:obj.属性

非标准属性:obj.getAttribute('');可以获取到标签的任何属性

<div><>     //
setAttribute('');

获取css样式属性

getComputedStyle(非行内样式)
getComputedStyle(div,null).height   //对IE浏览器不兼容
getCurrentStyle(非行内样式)
getCurrentStyle.height  //兼容IE浏览器

操作样式(行内样式)

设置单个样式(行内样式)

obj.style.标准属性='height:200px';

设置多个样式(行内样式)

obj.style.cssText=‘height:200px;width:200px’;

对元素html属性

this.classList.add(); 增加类名

this.classList.toggle(); 如果有就增加,如果没有就删除

this.classList.remove(); 移除类名
}

获取元素

获取元素在页面中所占宽、高

offsetWidth

不包括margin

如果这个元素是display:none;那么不会被获取到

offsetHeight

不包括margin

获取元素在页面中实际的位置

offsetLeft

在display:fixed时,距离当前窗口的位置

如果没有fixed时,是遵照body定位

计算的是距离有定位属性的上级元素的距离,如果没有定位属性的父元素,计算的是距离body的值

offsetTop

在display:fixed时,距离当前窗口的位置

如果没有fixed时,是遵照body定位

计算的是距离有定位属性的上级元素的距离,如果没有定位属性的父元素,计算的是距离body的值

获取浏览器滚动条

document.body.scrollTop 谷歌

document.documentElement.scrollTop 火狐

值为数字

调错

先看控制台

如果有错是语法错误

对象的某个属性用的不正确

element

想要添加的类名、style是否添加上,如果没有添加上,就找个添加的这条语句

每行调错

从第一行代码,输入每个表达式的值

节点

html文档中,所有的构成部分都是节点,没有个节点和节点之间的关系构成了整个html文档树模型

nodeName

nodeType

nodeValue

document节点

nodeName #document

nodeType 9

nodeValue null

文本节点

nodeName #text

nodeType 3

nodeValue 文本的内容

元素节点

nodeName 大写的标签名

nodeType 1

nodeValue null

注释节点

nodeName #comment

nodeType 8

nodeValue 注释的内容

属性节点

nodeName 属性名 id="one"中的id

nodeType 2

nodeValue 属性值 id="one"中的one

节点关系

同辈关系

div.previousSibling;    //上一个兄弟节点
div.previousElementSibling;     //上一个元素节点
div.nextSibling;    //下一个兄弟节点
div.nextElementSibling;     //下一个元素节点

父辈关系

div.childNodes;     //所有的节点
div.children;       //所有的元素节点
div.parantNode;     //父辈节点

节点的操作

节点的创建

document.createElement('div');

节点的增加

body.appendchild();     //插入到元素之后
insertBefore(newobj,oldobj);    //插入到元素之前

节点的删除

par.removeChild();

节点的复制

clone=div.cloneNode(true);  //克隆的元素存在内存中,需要在单独对克隆的节点添加到其他节点上,才能在页面中显示

事件

事件源

事件发生在谁的身上,谁就是事件源

事件对象

事件发生的时候,在自动创建的一个对象,用来保存事件发生时候的所有信息

    div.onclick=function(e,way='1'){
        console.log(e,way);
    }   //  e是默认的事件传参;

​ altKey; 验证alt是否被按下;

​ cancelBubble;

​ clientX; 鼠标事件的距离浏览器窗口的X距离

​ clientY; 鼠标事件的距离浏览器窗口的Y距离

​ ctrlKey; 验证ctrl是否被按下;

​ detail;

​ offsetX; 鼠标事件的距离当前事件源的X距离

​ offsetY; 鼠标事件的距离当前事件源的Y距离

​ pageX; 鼠标事件的距离body的X轴距离

​ pageY; 鼠标事件的距离body的Y轴距离

​ screenX; 鼠标事件的距离屏幕的X距离

​ screenY; 鼠标事件的距离屏幕的Y距离

​ srcElement;

​ shiftKey; 验证shift是否被按下;

​ target;

​ type; 事件类型;

​ which;

​ ASCII码值:左37;上38;右39;下40;空格32;回车13;

事件类型

用户的行为

mousewheel

用事件监听的方式添加

transitionend

用事件监听的方式添加


animationend

用事件监听的方式添加

wheelDeltaX

wheelDeltaY

事件处理程序

事件发生之后的响应

事件的添加

obj.addEventListener

    function fun1(){
        alert(1);
    }
    function fun2(){
        alert(2);
    }
    obj.addEventListener('click',fun1,false);
    obj.addEventListener('click',fun2,false);
}
//可以给一个对象添加多个事件;

obj.attachEvent (IE)

obj.attachEvent('onclick',fun1);

事件的删除

obj.removeEventListener

    obj.removeEventListener('click',function(){
        alert(1);
    },false);
    obj.removeEventListener('click',function(){
        alert(2);
    },false);
}
//

obj.detachEvent (IE)

obj.detachEvent('onclick',fun1);

事件的删除

obj.removeEventListener

    obj.removeEventListener('click',function(){
        alert(1);
    },false);
    obj.removeEventListener('click',function(){
        alert(2);
    },false);
}
//

obj.detachEvent (IE)

obj.detachEvent('onclick',fun1);

事件对象

事件发生时自动创建的一个对象用来接收事件发生时的所有信息

e||window.event

事件流

当一个事件触发的时候,当前元素的父元素乃至整个页面,都会以一定的顺序来响应整个事件。响应的顺序叫做事件流。

2、先向下进行捕获,然后再向上冒泡

冒泡型事件流

从当前元素到根元素一级一级往上出发,

除了mouseenter、mouseleave不会触发事件流

捕获型事件流

从根元素向下捕获

阻止事件流

阻止事件流是阻止事件的传递

if(e.stopPropagation){
        e.stopPropagation();    //兼容现代浏览器
   }else{
        e.cancelBubble=true;       //兼容IE
   }

事件委托

1、新添加进来的元素,需要添加事件的时候

2、做事件优化的时候

3、使用ajax的时候

目标事件源:真正触发事件的元素

document.onload=function(){  
    var btn=document.querySelector('button');
    var div=document.querySelector('div');
    btn.onclick=function(){
        var                     newdiv=document.createElement('div');
        document.body.appendChild(newdiv);
        newdiv.innerText="new";
    }
    //目标事件源,真正触发事件的元素
    document.body.onclick=function(e){
        var obj=e.target;
        if(obj.tagName=="DIV"){
            obj.style.backgroundColor='blue'
        }
    }
}

contentidetable="true";

时间对象

MGT时间

格林尼治天文台每天发布的时间

UTC时间

世界协调时间,由原子钟计时;

计算机元年时间:1970年1月1日0时0分0秒,1970年之前为负,1970年之后为正

当前时间计算的是当前时间距离1970年的毫秒数

使用实例化时间

var time=new Date();

var time=new Date("4/21/2017 23:00:00");
var time=new Date(2017,3,21,15,16,08,123);  //月份的设置从0-11

getTime();

获取当前时间距离1970年的毫秒数

getFullyear();

获取4位数的年份

getMonth();

getDay();

0是周日

getHours();

getIMinutes();

getSecond();

getMillisecond();

cookie(本地存储)

是一种字符串,以键值对的结构形式出现

只允许在用户端里面存储4k的大小

1bit=2

1Byte=8Bit

1K=1024B

1M=1024KB

1G=1024MB

1T=1024G

同域原则

不能跨浏览器访问

cookie的访问

document.cookie

cookie的设置

临时性的cookie

浏览器关闭时,自动被删除;

document.cookie=‘’键=值 ‘’;

有生命周期的cookie

var now=new Date();
now.setTime(now.getTime()+30*1000);
document.cookie='aa=bb;expires='+now.toGMTString();

setCookie();

delCookie();

getCookie();

localStroage(永久存储)

只要不删除就不会消失

存储大小为5-10M大小

同域原则

不能跨浏览器

和时间没有关系

存储不安全

值为对象

只能存储字符串

clear();

getItem();

setItem("name","lisi");

sessionStroage(会话级存储)

会话(窗口)关闭就删除了

存储大小为5-10M大小

同域原则

不能跨浏览器

和时间没有关系

存储不安全

JSON.stringify();

将数组转化为字符串

JSON.parse

将字符串转化为数组

正则表达式RegExp()

正则是用来检测某个字符串是否符合语法规范的语言

表单验证

信息过滤

信息检索

定义方式

var reg=/不能有数字/;
var r=new RegExp();

方法

exec();

输出为一个数组对象

结构为[0:,index:,input:]

0 代表匹配到的字符;

index 代表匹配到的字符的索引位置

input 代表检测的字符串

test();

检测是否符合要求,符合为true,不符合为false

模式修正符

i

不区分大小写

var reg=/ /i;   //i代表不区分大小写
var str='abcAdef';
console.log(str);
console.log(reg.exec(str));
m

多行匹配

var reg=/^a\wc$/m;  //m代表多行匹配
var str='abc\ndef';
console.log(str);
console.log(reg.exec(str));
g

全局匹配

var reg=/ /g;   //g代表全局匹配
lastIndex属性

原子

构成正则表达式最小的单位

一个原子只能匹配一个字符

a-z

0-9

字符,.@#¥%

\d 用来匹配0-9的数字

\D 用来匹配除了0-9的数字

\w 用来匹配数字字母下划线0-9 a-z A-Z

\W 用来匹配除了数字字母下划线0-9 a-z A-Z _以外的

\s 匹配空白字符 空格 \n \r \t \v \f

\S 匹配除了空白字符 空格 \n \r \t \v \f以外的

. 匹配除了换行符以外的字符

原子表

自定义的原子

[0-9] \d

[^0-9] \D

[0-9a-zA-Z_] \w

[^0-9a-zA-Z_] \W ^表示!非

转义字符

\

var reg=/http:\/\/www\.[0-9a-z]\.com/

|

var reg=/ab|cb/;
var str='abc';
console.log(reg.exec(str));     //返回值为ab

原子分组

当形成原子分组的时候,括号里面匹配到的东西就会被压入内存(栈区),已备使用

反向引用
var reg=/a(b|c)c(\d)\1/;
var str='abc1b';
console.log(reg.exec(str));     //返回值为abc1b,反向引用只对括号里保存下来的*值*进行匹配。
var reg=/a(b|c)c(\d)\1\2/;
var str='abc1b1';
console.log(reg.exec(str));
//(3) ["abc1b1", "b", "1", index: 0, input: "abc1b1"]
//0:"abc1b1"
//1:"b"
//2:"1"
//index:0
//input:"abc1b1"
//length:3
//__proto__:Array(0)
取消反向引用

括号里面的东西不会被保存下来

var reg=/a(?:b|c)c(\d)\1/;
var str='abc11';
console.log(reg.exec(str));
//(2) ["abc1b", "b", "1", index: 0, input: "abc1b1"]
//0:"abc11"
//1:"1"
//index:0
//input:"abc11"
//length:2
//__proto__:Array(0)

量词

{}
var reg=/\d{3}/;    //匹配三次;
var str='123';
console.log(reg.exec(str));     //返回123;
贪婪匹配

偏向于匹配多的

var reg=/\d{3,5}/;  //匹配3次或者4次或者5次;
var str='12345';
console.log(reg.exec(str));     //返回12345;
吝啬匹配

偏向于匹配少的

var reg=/\d{3,5}?/; //匹配3次或者4次或者5次;
var str='12345';
console.log(reg.exec(str));     //返回123;
匹配多次(吝啬匹配)

匹配成功的前提下,开启尽可能少的匹配

var reg=/\d{3,5}?d/;    //匹配3次或者4次或者5次;
var str='12345d';
console.log(reg.exec(str));     //返回12345d;
var reg=/\d{3,5}??d/;   //第一个?是0次或1次匹配,第二个问号是开启吝啬匹配
var str='12345d';
console.log(reg.exec(str));     //返回5d;
var reg=/\d{3,}/;   //匹配最少3次,上不封顶;
var str='12345';
console.log(reg.exec(str));     //返回12345;
var reg=/\d{0,3}/;  //匹配最多3次;
var str='12345';
console.log(reg.exec(str));     //返回12345;
+

匹配>=1次

var reg=/\d+/;  //匹配>=1次;
var str='12345';
console.log(reg.exec(str));     //返回
?

匹配0次或1次

var reg=/\d?/;  //匹配0次或1次;
var str='12345';
console.log(reg.exec(str));     
//返回["1", index: 0, input: "12345"]
0:"1"
index:0
input:"12345"
length:1
*

匹配>=0次

var reg=/\d*/;  //匹配>=1次;
var str='12345';
console.log(reg.exec(str));     //返回
匹配身份证
var reg=/\d{17}[0-9X]/;
匹配网址
var reg=/(?:http|https):\/\/(?:www\.)?[0-9a-z]{2,}\.com/
边界匹配

^匹配开头$匹配结尾

var reg=/^123\d{2,4}/;  //边界匹配;
var str='123455d';
console.log(reg.exec(str));     //返回

正则

var str='a1b2c3d'
var reg=/\d/;
console.log(str.split(reg));
var str='a1b2c3d'
var reg=/\d/g;
console.log(str.replace(reg,'?'));
var str='a1b2c3d'
var reg=/\d/g;
console.log(str.search(reg));   //返回0;即使用全局g也返回第一个出现的index;

match

不加g

var str='a1b2c3d'
var reg=/\d/;   //不加g和exec的表现一样
console.log(str.match(reg));    //返回['1','1',input:'a1b2c3d'];

加g

var str='a1b2c3d'
var reg=/\d/g;  //加g以数组形式返回所有的匹配到的东西
console.log(str.match(reg));    //返回['1','2','3'];

周末作业

邮箱

var reg=/^[0-9a-z]{6,15}@(?:163|qq|sina|126|139gmail)$/;

电话(座机)

var reg=/^0\d{2,3}-\d{7}$/;

手机

账号

var reg=/^[0-9a-z]{6,20}$/;

密码

var str='huhbgdfo@#';
var reg=/^[0-9a-z./@#$%]{4,17}$/;
console.log(reg.exec(str));

身份证

var reg=/^\d{17}[0-9X]$/;

trim

trimleft

trimright

块级作用域

只要是{}里面的都是块级作用域

独立作用域

let divs=document.querySelectorAll('div');
for(let i=0;i<divs.length;i++){
    divs[i].onclick=function(){
        console.log(i);
    }
}
//此时let是每次循环式都会创建一个独立作用域
    let i=0;    //每次循环,let都会赋值,创建一个独立作用域
    divs[i].onclick=function(){
        console.log(i);
    
    let i=1;
    divs[i].onclick=function(){
        console.log(i);
     
    let i=2;
    divs[i].onclick=function(){
        console.log(i);

扩展运算符

数组或者字符串解析成用空格隔开的字符串

var arr=[1,2,3];
console.log(...arr);    //返回1 2 3;可以把空格当成逗号

rest参数用法

function fun(a,b,c,...arr){     //...arr是逆向的把4,5,6,7,8转化成数组[4,5,6,7,8]的形式
   console.log(arr);    //返回[4,5,6,7,8]
}
fun(1,2,3,4,5,6,7,8);       //函数传实际参数,前面的一一对应,后面的统一对应...arr

解构赋值

目的是为了赋值

let a,b;
[a,b]=[1,2];    //数组两边模式相同,一一对应赋值;
console.log(a,b);   //返回  1 2;


let a=1,b=2;
[a,b]=[b,a];    //等号两边互换赋值;
console.log(a,b);   //返回  2  1;


let a,b;
[a,b,...arr]=[1,2,3,4]
console.log(a,b,arr);   //返回1  2  [3,4];

let a,b,c;
[a,b,c]='abc'   //右边不是数组,程序会尽可能的把右边转化成一个数组,然后结构赋值
console.log(a,b,c);

let str1=[1,2,3];
let str2=['a','b','c'];
console.log([...str1,...str2]);     //...str拓展运算符会把str转化成以空格分开的字符串,然后在外面加上[]就变成了一个数组

暂时性死区

{
                    //暂时性死区
                    //暂时性死区
                    //暂时性死区
                    //暂时性死区
  console.log(nub);
  let nub=200;
}

let

不存在预解析,先声明后使用

const

不存在预解析,先声明后使用

es6对象的写法

写法

let name='lisi';
let age=18;
let obj={
    name,
    age,
};
console.log(obj);   //返回{name: "lisi", age: 18}

解构赋值

var a,b;
({name:a,age:b}={name:'lisi',age:18});  //加括号的原因是{}分别代表一个块级作用域,所以需要加上一个()放在一个块级作用域里面
console.log(a,b);   //返回'lisi'  18;
var {length:len,0:aa}=[1,2,3];
console.log(len,aa);    //返回3 1;

函数扩展

箭头函数

//ES5的写法
var fun=function(){
    
}
//箭头函数写法
var fun=()=>{   //省略function,在()后面加=>
    
}
//ES5写法
var fun2=function(a){
    return a;
}
console.log(fun1(1),fun2(2));
//ES6写法
var fun1=a=>a;      //与上面的意思是一样的

this指针

箭头函数使用this指针时,由定义函数时创建的环境决定的this指针

    let obj=new Object();
    obj.fun=function(){
        let self=this;
        let div=document.querySelector('div');
        div.onclick=function(){
            console.log(self);
        }
    }
    console.log(obj['fun']);

继承

从一个构造函数继承另一个构造函数

子类里面没有this,必须用super();super代表了父类的constructor方法,必须先用super();才能再用this;

class Animal{
    constructor(name){
        this.name=name;
    }
    aa(){
        console.log(this.name);
    }
}
var obj1=new Animal('lisi');

class Dog extends Animal{
    constructor(box){
        super('lisi');
        this.box=box;
    }
    bb(){
        console.log(this.box);
    }
}

var obj2=new Dog('123');
console.log(obj1);
console.log(obj2);

移动端事件

touchstart

touchmove

touchend

touches

记录点击屏幕的数值信息

targetTouches

记录点击在元素身上的数值信息

changedTouches

自从上一次时间触发以后,记录发生在元素身上的数值信息

上一篇下一篇

猜你喜欢

热点阅读