1.ES5:提供了一些新的API
1.保护对象:保护对象的属性和方法
-
1,四大特性可以保护对象:
1.对象的每一个属性都有四大特性,3个开关默认为true
{
value;1001,
writable:true,
enumerable:true,
configurable:false
}
2.修改对象的某个属性的四大特征:
Object.defineProperties(obj,{
"属性名":{四大特性},
...
})
-
2.三个级别:
1.防拓展:防添加
Object.preventExtensions(obj):
2.密封:防添加防删除
Object.seal(obj)
3.冻结:防添加防删除防修改
Object.freeze(obj)
2.数组的新的API:3组6个
-
1.判断:判断数组中的元素是否满足我们的条件
1.every:判断数组中的元素知否全都满足我们的条件,类似于&&,只要有一个为false则为false
2.some:判断数组中的元素是否包含满足我们的条件,类似于||,只要有一个为true则为true
语法:arr.every/some(function(val,i,arr){
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 return 判断条件;
})
2.汇总:将所有的数组的元素进行+-*/
var sum=arr.reduce(function(prev.val,i,arr){
return prev+val;
},base)
以上6个API 简化for循环
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
3件事
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(val v of arr){
v;
}
缺点:
1.不能直接修改原数组,只能返回新数组
2.不能遍历hash数组
例题:摇号
<ul>
<li>噜噜</li>
<li>猪猪</li>
<li>灰灰</li>
<li>小狐狸</li>
<li>Towa</li>
<li>kario</li>
<li>Tony</li>
<li>春傻子</li>
</ul>
<script>
var lis = document.getElementsByTagName("li");
lis = Array.prototype.slice.call(lis);
var arr = [];
while (arr.length < lis.length) {
var r = parseInt(Math.random() * (lis.length - 1 - 0 + 1));
if (arr.indexOf(r) == -1) {
arr.push(r)
}
}
lis.forEach(function(val,i){
val.setAttribute("xx",arr[i])
})
lis.sort(function(a,b){
return a.getAttribute("xx")-b.getAttribute("xx")
})
var ul=document.getElementsByTagName("ul")[0];
lis.forEach(val=>ul.appendChild(val))
</script>