第一:
ES5,ES6新特性
1.保护对象的成员:
1.四大特性:
1.value:"值" //真正保存值的地方
2.writeable:true or flase // 一个开关,用来判断是否可以被修改
3.enumerable: true or flase // 一个开关,判断是否可以遍历;
4.configurable:true or flase // 一个开关,判断是否可被删除;
2.修改四大特性:oblect. definedprototype{obj,{ "属性名":{四大特性的操作} }}
3.三个级别:用来简化四大特性的操作
1.防扩展(即防止添加):object. preventExtensions(xx) ;xx某一个对象
2.密封(即防止添加和删除):object.sea(xx) ;xx某一个对象
1.防扩展(即防止添加,删除,修改):object. freeze(xx) ;xx某一个对象
2.ES6的新API:
1.判断API every:每一个都满足条件,则为true,否则为false,类似于&&
arr.every( function (val,i,arr) { return 判断条件 }),val是数组的值,i是下标,arr是数组本身
2.判断API:some :全部都不满足为false,其他为true,类似于||;
arr.some (function (val,i,arr){ return 判断条件 } )
3.遍历数组新API:forEach;map
arr.forEach(function (val,i,arr) { 数组的操作 } );forEach直接修改原数组;
let newarr = arr. map(function(val,i,arr){ return操作 });map不修改原数组,返回一个新数组;
4.过滤和汇总:到不修改原数组,返回新数组
1.过滤:let newarr=arr. filter(function (val,i.arr){ return 条件})
2.汇总:let newarr = arr. reduce(function (prev,val, i ,arr){ return prev+sum; },基础值);
3.根据对象创建子对象:
1.object. create():根据父对象创建子对象,继承性已确定
let child= object. create(baba.{
"自有属性":{四大特性的类容}
})
4.call/apply/bind:
1.call/apply:临时替换了函数中的this的指向
函数名.call(借用的对象,实参1,.....)
函数名.apply(借用的对象,[传入实参1,.....]) - apply会打散传入的数组
2. bind:永久替换了函数中的this的指向
1.创建了一个和原函数完全相同的新函数
2.将新函数中的this永久绑定为了指定对象 - 不能再被改变
3.将新函数中的部分参数提前永久固定
语法:var 新函数=函数名.bind(指定对象,永久实参,...); - 不是立刻执行,需要自己调用
特殊点:bind绑定的新函数无法被call/apply借走
使用场景:
1、Math.max/min.apply(Math,arr)
2、Object.prototype.toString.call/apply(x);
3、将类数组转为普通数组(API非常多):
5、严格模式:
开启:"use strict"; //写在任何一个作用域的顶部都可以
作用:1、禁止给未声明的变量赋值
2、将静默失败升级为了错误
6.*模板字符串:简化字符串拼接的操作
`名字叫${name}`
7.*块级作用域:
可用 let 变量名=值
1、禁止声明提前
2、添加了块级作用域,一个{}就是一个块
3、记录着鼠标初发事件的元素的下标
8.箭头函数:简化回调函数
简化:function省略,在()和{}之间添加=>,如果形参只有一个()省略,如果函数体只有一句话,省略{};如果函数体只有一句话并且是return,那么省略{}和return
事件不要简化为箭头函数,this指向是window;
第二:Dom
Dom分为:核心Dom;HTMLDom;XMLDom
1.dom节点的三大属性:
1.xx. node. type:获取节点类型,返回一个数字;卵的
2.xx. nodevalue;获取节点的值;
3.xx. nodeName; 获取节点的名称,用来判断是什么标签
2.递归:函数中再次调用了函数自己;在层级不确定的时候使用
function 函数名(){ 最开始的操作
判断有没有下一级,下一级和上一级的是一样的;有的话再次调用函数;
}
3.查找元素新方式:
1.let elms=document.queryselector("任何css选择器");//找到的是单个元素;匹配一个元素
2.let elms=document.queryselectorAll("css选择器");
4.dom之删除属性的方法:
1.elsms. removeAttribute("属性名");//核心dom操作方法
2.elms. 属性名=" "; //html 简化方法;删除得不干净;
5.创建元素的方式:
1.创建元素:let elms= document. createElement("标签名");
2.设置元素的必要属性:elms. 属性名="属性值";或者绑定事件
3.渲染dom树:父亲.appendchild(elms);父亲.insertBefore(elms);父亲.replacechild(elms);
6.删除元素的方法:xx.remove()
7.htmlDom:
1.imges图片对象:let img= new image();
2.form对象:简化form表单的控件
1.查找form:let forms=document.forms[ i ];
2.查找form元素:input:forms.elements[ i ]
3.form专属提交事件:form. onsubmit=function(){ 提交事件 //阻止提交 return FALSE }
3.select对象:
1.属性:select. options:查找select下面的option标签;等同于select. childrens;
2.select.selectedIndex:获取当前选择的option的下标;
3.select.add(option):添加option
4.select.remove(i);删除选中项为i的下标元素;
5.select专属事件:select.onchange=function(){ 状态发生改变的事件 };
4.option对象:
1.let opts=new option("innerHTML","value");
2.搭配select对象使用:select.add(opts);快速生成并渲染到select中;
第三:Bom
BOM对象:window对象,history历史对象,location跳转对象,screen屏幕对象,navigator浏览器信息对象,event事件对象
1.window对象:
1.网页打开的新方式:除了a标签,window的open方法:open("url路径地址","打开方式");
打开方式有
_self:当前页打开;可后退
_blank:新窗口打开;可打开多个
"自定义属性":新窗口只能打开一个
location.replace("网址");刷新当前页面,且不可后退
2.window属性:
1.获取浏览器的完整大小:outerwidth,outerheight;
2.获取body(文档显示区域)的大小:innerwidth,innerheight;
3.获取屏幕的大小:screen.width,screen.height;
2.window对象之定时器:
1.周期性定时器:间断的执行某操作,列如轮播等
1.开启:timer=setinterval(()=>{
执行操作
},间隔毫秒数);
2.关闭定时器:clearinterval(timer)
2.一次性定时器:
1.开启:timer=setTimeout(()=>{ 操作 },毫秒数)
2.停止:clearTimeout(timer);