ES5
es5严格模式
“use strict”; 声明严格模式
n = 123
console.log(n); //这个里面会直接报错 采用了严格模式后对应的内容 需要更加规范 不支持八进制
//eslint 代码检查器
//怪异模式
n = 123
console.log(n);
1、不可以省略var声明变量
"use strict"; //声明严格模式
n = 123 //报错
console.log(n);
2、禁止函数使用this关键字指向全局变量
<body>
<div id="box" onclick="handlerClick()">111</div>
<script>
function handlerClick(){
console.log(this); //打印undefined
}
</script>
</body>
3、禁止使用八进制方法
4、不允许在非函数的代码块内声明函数
5、严格模式下,arguments变量,形参是不会变(不同步)
es5的数组高阶函数
什么是高阶函数 以函数作为参数的函数叫做高阶函数
es5数组的方法 静态方法
var arr = ['a','b','c','d']
console.log(Array.isArray(arr)); //判断是否是一个数组 返回为布尔类型的值
es5关于数组的高阶函数
forEach 遍历的函数 没有返回值
arr.forEach(function(value,index,array){
//第一个value表示值 第二个index表示下标 第三个array表示你遍历的数组
console.log(value);
console.log(index);
console.log(array);
//value = value+value //value是只读属性
array[index] = value+value
})
map遍历的函数 有返回值 //返回数组 数组的长度和我们原本的数组长度一致
var newArr = arr.map(function(value,index,array){
if(value!='a'){ //当a的时候不返回 a位置的结果 undefined
return value+value
}
})
console.log(newArr.length);
console.log(arr);
console.log(newArr);
filter 过滤 返回值为数组里面指定是一个function
var arrs = [10,15,12,13,11]
//过滤掉12以下的数据
var newArr = arrs.filter(function(value,index,array){
if(value>=12){
return value
}
})
console.log(newArr);
var strArr = ["abcdde",'abc','efg','abc123','cab']
//过滤掉 里面包含abc
var strArr1 = strArr.filter(function(v,i,arr){
if(!/abc/.test(v)){
return v
}
})
var strArr2 = strArr.filter(function(v,i,arr){
if(i%2==0){
return v
}
})
console.log(strArr1);
console.log(strArr2);
reduce 计算方法 计算总和(从左到右)
var arrs = [1,2,3,4]
//上一个值 当值 当前下标 遍历的数组
var sum = arrs.reduce(function(preValue,currentValue,currentIndex,arr){
return preValue+currentValue
})
console.log(sum);
reduceRigth 计算方法(从右到左)
var count = arrs.reduceRight(function(preValue,currentValue,currentIndex,arr){
return preValue+currentValue
})
console.log(count);
var strArr3 = ['A','B','C']
var str1 = strArr3.reduce(function(preValue,currentValue,currentIndex,arr){
return preValue+currentValue
})
var str2 = strArr3.reduceRight(function(preValue,currentValue,currentIndex,arr){
return preValue+currentValue
})
console.log(str1);
console.log(str2);
every 遍历每一个是否都符合条件 返回布尔类型的值 都符合条件返回true 有一个不符合返回false
var numberArr = [1,20,15,30]
var isTrue = numberArr.every(function(v,i,arr){
return v<30
})
console.log(isTrue);
some 是否存在符合条件的 有一个就返回true 都没有返回false
var numberArr = [1,20,15,30]
var isTrue = numberArr.some(function(v,i,arr){
return v<0
})
console.log(isTrue);
针对日期 新增方法 now() 静态方法 获取当前日期离1970年1月1日0时0分0秒的毫秒值(时间戳)
var n = Date.now() //这个使用多
console.log(n);
字符串模板
var str = `${n}hello`
对于对象来说提供get及set
var user = {
username:'张三',
name:{
get name(){ //获取会自动调用
return this.username
},
set name(username){ //设置会自动调用
this.username = username
}
}
}
console.log(user.name);//获取name属性 默认执行get方法
user.name = '李四' //设置name属性 默认执行set方法
this指向的改变 es5的bind
var user = {
username:'张三'
}
function hello(){
console.log(this); //指向user
}
//bind将这个函数绑定给一个对象 那么这个函数里面的this就会指向对应的对象
//函数对象.bind(绑定的对象)()
hello.bind(user)()
var obj = {
print:function(){
console.log(this.username);
}
}
obj.print.bind(user)() //一般我们绑定的this都是函数里面的 bind绑定对象 一般常用于定时器
setInterval(obj.print.bind(user),2000)