ES:ECMAScript
ES5提供了一些新的API
1、保护对象:保护对象的属性和方法
1、四大特性保护对象
(1)对象的每个属性都有4大特性,其中3个开关默认为true
{
value: XXX,//保存实际值的地方
writable: true,//开关:控制属性是否可以被修改
enumerable: true,//开关:控制属性是否可以被for in循环遍历
configurable: false//开关:控制属性是否可以被删除,总开关,一旦设置为false就不会允许修改其他特性,它本身一旦改为false不可逆
}
(2)修改对象的某个属性的四大特性:
Object.defineProperties(obj,{
"属性名":{四大特性},
...
})
2、三个级别
(1)防扩展:防添加
Object.preventExtensions(obj);
(2)密封:防添加防删除
Object.seal(obj)
(3)冻结:防添加防删除防修改
Object.freeze(obj);
2、数组的新的API(简化for循环)
1、【判断】:判断数组中的元素是否满足我们的条件
(1)every:判断数组中的元素是否【都】满足我们的条件,类似于我们的&&,只要有一个为false则为false
(2)some:判断数组中的元素是否【包含】满足我们的条件,类似于我们的||,只要有一个为true则为true
语法:
arr.every/some(function(val,i,arr){
//val:当前值
//i:当前值的下标
//arr:数组本身
//切忌:函数自带return undefined;
return 判断条件;
})
2、【遍历】:把数组中的每个元素取出来执行相同 或 相似的操作
(1)forEach:直接修改原数组
arr.forEach(function(val,i,arr){
直接写操作;
})
(2)map:不修改原数组,直接返回新数组
var newArr=arr.map(function(val,i,arr){
return 直接写操作;
})
3、汇总和过滤:
(1)过滤:筛选出符合条件的元素: - 不会修改原数组
var subArr=arr.filter(function(val,i,arr){
return 判断条件;
})
(2)汇总:将所有的数组的元素进行+-*/
var sum=arr.reduce(function(prev,val,i,arr){
return prev+val;
},base)
3、根据一个父对象创建一个子对象并且继承已经设置完毕,提前保护对象
var 子对象=Object.create(父对象,{
"属性名":{四大特性},
...
})
4、call/apply/bind:替换了函数中的this
1、call/apply:临时替换了函数中的this - 借
差别:call:要求传入的实参必须单独传入
apply:要求传入的实参必须整理为一个数组,只能传一个数组参数
强调:call/apply相当于立刻调用函数
用法:方法名.call(借用的对象,实参,...)
方法名.apply(借用的对象,[实参,...]) - apply自动打散数组
固定套路:
Object.prototype.toString.call/apply(数组);
Math.max/min.apply(Math,arr);
关键点:将类数组转为普通数组
lis=Array.prototype.slice.call(lis);
2、bind:永久替换了函数中的this - 买
(1)创建了一个函数功能和原函数完全一样
(2)将新函数的this永久绑定为了你指向的对象
(3)将信函书中的部分固定参数提前永久绑定
用法:
var 新方法名=方法名.bind(永久绑定的对象,永久绑定的实参,...);
不会立刻执行,需要手动调用
5、严格模式
开启严格模式:"use strict"; - 可以出现在任何作用域的顶部
用处:(1)禁止给未声明的变量进行赋值;(2)将静默失败升级为错误
2、ES6:简化了/改变了语法
1、模板字符串:支持直接在字符串中书写变量
`我的名字叫${name}`
再也不用""和''了
2、块级作用域:
将var替换为let用于创建变量:优先使用let
作用:
1、let之前不允许出现未声明的同名变量——解决声明提前
2、添加了块级作用域:一个{}就是一个块
3、*绑定事件时,会记录着当前元素的下标——不需要自己定义自定义下标
3、箭头函数:简化一切的回调函数
回调函数:匿名函数,没有自调,就是回调
公式:去掉function,()和{}之间添加=>,如果形参只有一个省略(),如果函数体只有一句话省略{},如果函数体只有一句话并且是return,{}和return都省略
箭头函数中如果出现this->外部的对象
建议:我们在事件中暂时不要简化为箭头函数
4、for...of循环
for(var v of arr){
v;//当前值
}
缺点:1、不能直接修改原数组,只能返回新数组;2、不能遍历hash数组,不能遍历对象