1、保护对象:保护对象的成员(属性和方法)
如何保护:
(1)、四大特性-每一个属性和方法都有四大特性
如何设置四大特性:
Object.defineProperties(obj,{
"属性名":{
value:实际保存值得地方
writable:true/false;//开关:控制着这个属性是否可以被修改;
enumerable:true/false;//开关:控制着这个属性是否可以被for in循环遍历到
configurable:true/false;//开关:控制着这个属性是否可以被删除
}
})
(2)、三个级别:
①、防扩展:禁止给对象添加新属性
object.preventExtensions(obj);
②、密封:禁止给对象添加新属性和删除属性
object.seal(obj);
③、冻结:禁止给对象添加新属性和删除属性和修改属性
object.freeze(obj);
2、*数组新的API:3组6个
(1)、判断:判断结果一定是一个布尔值
①、 every:每一个——要求每一个元素都要满足,结果才为true,只要一个不满足,结果则为false——类似&&:碰到false就不会在执行后续操作了
语法:arr.every(function(val,i,arr){
//var-当前值
//i-当前下标
//arr-数组本身
return 判断条件
})
②、some:有一些——要求每一个元素都不满足,结果才为false,只要有一个满足,结果则为true——类似 ||:碰到true就不会再执行后续操作了
语法:arr.some(function(val,i,arr){
return 判断条件
})
(2)、遍历:将数组中每一个元素取出来执行 相同或相似的操作
①、 forEach:遍历数组,直接修改原数组
语法:arr.forEach(function(var,i,arr){
直接操作
})
②、map:遍历数组,不修改原数组,返回一个新数组
语法:var newArr=arr.map(function(val,i,arr){
return 操作;
})
(3)汇总和过滤:
①、过滤:筛选出自己想要的,但是不会修改原数组
语法:var newArr=arr.filter(function(val,i,arr){
return 判断条件
})
②、汇总:把数组中的每个元素都汇总到一起
语法:var result=arr.reduce(function(prev,val,i,arr){
return prev+val
},基础值)
以上6个API的底层都是for循环,目的-简化for循环
3、Object.create():希望根据父对象创建子对象,继承自动设置完毕。
语法:var 子对象=Object.create(父对象,{
"自由属性":{四大特性},
})
4、面试:严格模式:很严格
开启:在你的任何作用域的顶部都可以加上这句话:"use strict"
功能:1、禁止给未声明的变量赋值-解决了全局污染
2 、禁默失败升级为错误
5、*****call/apply/bind:不是自己方法也可以使用,
(1)、call/appiy:【临时替换函数中心的this】-借用
语法:函数名.call(借用的对象,实参,.....);-单独传入每一个实参
函数名.apply(借用的对象,[实参,....]);-只能传入一个实参,是一个数组,但是其实apply也会悄悄地将数组打散
强调:call/apply,相当于立刻调用函数,立刻执行
(2)、bind:【永久替换了函数中的this】-买
3件事:
①、创建了一个和原函数功能完全相同的新函数
②、新函数中的this永久的绑定固定为了指定的对象,别人借不走
③、将新函数中的部分参数永久固定
语法:var 新函数=原函数.bind(指定对象,永久固定参数,.....);-不是立刻执行,需要自己调用
强调:bind绑定的新函数是没有办法被call/apply借走的
推荐使用:call/apply-借
固定套路:
1、Math.max/min.apply(Math,arr)
2、Object.prototype.toString.call/apply(arr)==="[object Array]"
3、***类数组转为不同数组:保存一下=Array.prototype.slice.call/apply(类数组)
二、ES6:简化了语法-都是干货
1、*模板字符串:可以在字符串中放入变量,不需要在做字符串的拼接了,简化了输入法的切换,${} 还实现了一个简单的js环境
语法:我的名字${name}
2、*块级作用域:尽量以后创建变量【优先】使用let关键字
let 变量名=值
作用:
1、禁止了声明提前
2、添加了块级作用域:一个{}就是一个块
3、记录者当前触发事件的元素的下标
3、***箭头函数:简化回调函数
公示:去掉function,在()和{}之间添加=>,如果形参只有一个,省略()如果函数体只有一句话,省略{},如果函数体只有一句话并且是return,return和{}都省略
特殊:千万不要将事件也简化为箭头函数-this会失效-暂时
4、for of 循环-不推荐
for(var v of arr){
v;//当前元素
}
缺点:1、不能修改原数组,只能返回新数组
2、不支持hash数组,不支持对象