一严格模式
- 在严格模式下,声明变量必须使用 var
- 在严格模式下,不能使用八进制
- 在严格模式下,不能使用arguments.callee
- 在严格模式下,不能使用eval() //eval() 可以执行其中的代码串 1 不安全 2污染全局变量
- 在严格模式下,不能使用with(obj) // 方便查找属性 先在obj内部查找 没有在往原型链上查找
- 严格模式下delete 删除对象中的属性报错,在普通模式下,使用delete删除变量,不会报错,但是不能删除变量
- 全局变量消失(this)
- with(obj)//严格模式下报错
with可以简化对象操作,with运行的原理,首先会将所有的变量锁定现在obj的范围内,如果有直接使用,如果没有则根据作用域链的方式向上级查找
- 函数中的同名参数(在非严格模式下,形参中出现同名变量,后面的会覆盖掉前面的(覆盖发生在函数调用的时候,传值的过程还是一一对应),严格模式下,不允许函数出现同名参数) ;
- 对象中同名属性(可以忽略的)非严格模式下,对象中出现同名变量,后面的覆盖前面的,严格模式下,会忽略前面的变量直接看最后一个同名属性
二、新增加的数组方法
forEach((item, index ,array)=>{})
forEach() 方法用于遍历调用数组的每个元素,并将元素传递给回调函数。
- forEach() 对于空数组是不会执行回调函数的
- 回调函数内,会忽略return的返回值,整体没有返回值
- 原数组没有发生变化
var arr=['1','2','3','4','5'];
var res=arr.forEach(function(value,index,arr){
// console.log(arguments);
console.log(value,index,arr);
return 111;//会被忽略
});
console.log(res);//undefined
map((item, index ,array)=>{})
map() 方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。
//map 映射 遍历->操作->返回
var arr=[10,20,30,40];
var newArr=arr.map(function(item,index,Array){
return item + 2;
})
console.log(newArr);//[12, 22, 32, 42]
reduce((prev,next,index,Array)=>{})
reduceRight((prev,next,index,Array)=>{}) :(其他和redudce()方法一样 只是prev,value,index 是从数组末尾向前面算起的 )
功能:遍历数组累加数组中的元素
说明:遍历开始 ,之后就为前面累加的和
prev: 第一次prev的值为第一个元素的值 ,之后上一次遍历累加和;
next:当前遍历的元素
var arr=[10,20,30,40];
var newArr=arr.reduce(function(prev,next,index,Array){
console.log(arguments)
alert(prev+", "+next)
return prev + next;
})
alert(newArr);//100
/*
console.log(arguments)的结果
Arguments(4) [10, 20, 1, Array(4), callee: ƒ, Symbol(Symbol.iterator): ƒ]
Arguments(4) [30, 30, 2, Array(4), callee: ƒ, Symbol(Symbol.iterator): ƒ]
Arguments(4) [60, 40, 3, Array(4), callee: ƒ, Symbol(Symbol.iterator): ƒ]
*/
filter((item, index ,array)=>{})过滤
filter() 方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。
var arr=[10,20,30,40];
var res=arr.filter(function(item,index,Array){
return item>10 ; //返回满足条件的值
})
console.log(res);//[20, 30, 40]
**some((item, index ,array)=>{return 条件表达式})**一真就真 类似 ||
**判断return 后面的条件是否成立,如果成立,终止循环,返回true,否则false
**
arr=['1','2','3','4','5']
var res=arr.some(function(item,index,arr){
// console.log(arguments)
return item==3;//判断数组中是否存在30
//判断return 后面的条件是否成立,如果成立返回true,否则false
});
console.log(res);//true
**every((item, index ,array)=>{return 条件表达式})**一假就假 类似 &&
如果判断有元素不符合条件,终止循环,返回false,否则true
**
arr=['1','2','3','4','5']
var res=arr.every(function(item,index,arr){
// console.log(arguments)
return item==3;//判断数组中是否存在30
//判断return 后面的条件是否成立,如果成立返回true,否则false
});
console.log(res);//false
fill(value, start, end)
给数组填充数据,配合 Array()
// 语法 array.fill(value, start, end)
// fill() 方法用于将一个固定值替换数组的元素。
//value 填充的值 start ,end 数组中的长度位置(在start和end之间填入固定的值)
var arr=new Array(5);//中间的5代表哦数组的长度 其中的值为undefined
arr.fill("久哥最帅");
console.log(arr);//["久哥最帅", "久哥最帅", "久哥最帅", "久哥最帅", "久哥最帅"]
JSON拓展
**JSON.stringify(obj);**将对象转为JSON对象
JSON.parse(jsonstr);将JSON对象转为普通对象
var str= obj={
name:"zhangsan",
age:10,
sex:"男"
}
var res=JSON.stringify(obj)
console.log(res);//{"name":"zhangsan","age":10,"sex":"男"}
var obj1=JSON.parse(res)
console.log(obj1);//{name: "zhangsan", age: 10, sex: "男"}
JSON.stringify(obj,function(key,value){}) 将obj转化为JSON ,并对它进行遍历
JSON.parse(Json,function(key,value){}) 将JSON转化为obj ,并对它进行遍历
- 遍历的时候是有前提的,每一次都要求有返回值,如果没有返回值,则遍历立即结束
- 返回值作为对象当次遍历元素的值,
- 最后一次,键为空,值为要返回的对象
var obj={
name:"zhangsan",
age:10,
sex:"男"
}
var res=JSON.stringify(obj,function(key,value){
if(key){
return 27+value;
}else{
return value
}
})
console.log(res)
toJSON() 格式化时间
var d=new Date()
console.log(d);//Mon Mar 16 2020 21:22:47 GMT+0800 (中国标准时间)
console.log(d.toJSON());//2020-03-16T13:22:16.403Z