ES5:没有简化操作,但是带来了一些新特性
1、保护对象:属性和方法
保护对象:属性和方法
1、底层具有四大特性:
{
"value": "威图", - 真正实际保存值的地方
"writable": true, - 开关:控制着是否可以被修改
"enumerable": true, - 开关:控制着是否可以被for in循环遍历到
"configurable": true - 开关:控制着是否可以被删除,总开关:一旦设置为false,其他特性不可以再次修改,自己也不可逆
}
如何修改四大特性:
Object.defineProperties(对象名,{
"属性名":{四大特性},
...
})
2、三个级别:
1、防扩展:防止添加:Object.preventExtensions(obj);
2、密封:防止添加、删除:Object.seal(obj);
3、冻结:防止添加、删除、修改:Object.freeze(obj);
没用的:
1、如果你不用面向对象开发,你保护个串串
2、前辈们都没有保护,你更不用保护了
2、*数组的新API:3组6个:
*1、判断
every:每一个,理论完全等效于&&,必须全部满足结果才为true,只要一个不满足,结果就为false
var bool=arr.every(function(val,i,arr){
return 条件;
})
some:有一些,理论完全等效于||,必须全部不满足结果才为false,只要一个满足,结果就为true
var bool=arr.some(function(val,i,arr){
return 条件;
})

*2、遍历
遍历:对数组中的每一个元素执行相同 或 相似的操作
forEach:直接修改原数组 - 个人更喜欢
arr.forEach(function(val,i,arr){
操作
})
map:不修改原数组,【返回】一个新数组
var newArr=arr.map(function(val,i,arr){
return 操作;
})

3、过滤和汇总
过滤:根据你的条件,筛选出你需要的部分,但是不会修改原数组
var subArr=arr.filter(function(val,i,arr){
return 条件
})
汇总:把元素汇总到一起
arr.reduce(function(prev,val,i,arr){
return prev+val;
},基础值);
其实以上6个API,都是简化了for循环,一切的回调函数再拥有ES6过后都可以简化为箭头函数,以后我们不要再写for循环了,前提的是一个数组
4、Object.create()
Object.create():根据父对象创建子对象,设置好继承
var 子对象=Object.create(父对象,{
"属性名":{四大特性},
...
});
5、面试时会问你什么是严格模式:严格模式:很严格
开启:在你的任何作用域的顶部加上一句话:"use strict"
功能:1、禁止了给未声明的变量赋值 - 解决全局污染
2、静默失败升级为了错误
一旦报错后续代码就不再运行了
6、 ***** call、apply、bind:不是自己的方法也可以用 - 笔试面试都很容易碰到
*call和apply 临时调用 -借
call/apply:【临时】替换了函数中的this - 借用
语法:函数名.call(借用的对象,实参,...) - 单独传入每一个实参
函数名.apply(借用的对象,arr) - 只能传入一个实参,要求是一个数组实参,apply会悄悄的打散数组
强调:call/apply,相当于立刻调用函数,立刻执行

*bind:【永久】替换了函数中的this - 买
3件事:
1、创建了一个和原函数功能完全相同的新函数
2、将新函数钟的this永久绑定为了指定对象
3、将新韩淑中的部分参数永久固定
用法:var 新函数=原函数.bind(指定对象,永久实参,....); - 不是立刻执行的,需要自己调用
强调:bind绑定的新函数没有办法被call/apply借走

*固定套路 call/apply
个人更推荐:call/apply - 借:白嫖
1、Math.max/min.apply(Math,arr);
2、Object.prototype.toString.call/apply(x);
3、***类数组转为普通数组:
var 普通数组=Array.prototype.slice.call/apply(类数组对象);
ES5还给出了一种方案:var 普通数组=Array.from(类数组对象)
*摇号功能案例

ES6(ES2015):不光带了新特性,还带来了新语法,都是简化操作
1、*模板字符串
*模板字符串:可以在字符串中放入变量 - 不需要再做字符串拼接,在字符串中实现了一个简单的js环境
`我的名字叫${name}`

2、*let关键字
let关键字:创建变量,以后要【优先】使用let创建变量s
let 变量名=值;
作用:
1、禁止声明提前
2、添加了块级作用域 - 一个{}就是一个块!
3、记录着当前触发事件的元素的下标!
3、*箭头函数:简化一切回调函数
箭头函数:简化一切回调函数
口诀:function删掉,在()和{}之间添加=>,形参如果只有一个,可以省略小括号,函数体只有一句话,删除{},函数体只有一句话并且是return,{}和return都删掉

4、for of循环:垃圾
for(var v of arr){
v;
}
缺点:1、因为没有下标,无法修改原数组
2、无法遍历hash数组,也不能遍历对象