一、Json
javascript object notation js对象简谱。是一种独立于编程语言的轻量级数据交换格式,易于人阅读和编写,同时也易于机器解析和生成,网络传输效率高。
JSON.parse、JSON.stringify。可以将json与json对象进行转换。
二、forEach
forEach遍历函数,对每个元素执行参数函数,没有返回值。
参数一:callback
(1)ele 当前元素
(2)index 可选 当前元素索引
(3)arr 可选 当前遍历的数组
参数二: thisarg 可选,指定callback中的this值(默认指向window。this必须指向一个对象,如果thisarg传原始值,调用call/apply时,会转化为包装类,传null或者undefined无法转换,依然指向window)
es5的方法,兼容es3
Array.prototype.myForEach = function (callback,thisarg){
let originArray = this,
length = this.length,
thisarg = thisarg || window;
for(var i = 0; i < this.length; i++){
callback.apply(arg,[originArray[i], i , originArray])
}
}
中断forEach:
使用break和return都无法中断forEach循环,把forEach放在try catch语法块中,throw一个错误可以终止循环
三、filter过滤
遍历数组, 返回满足测试函数的元素。不会改变原素组。
参数一;
callBack
(1)ele 当前元素
(2)当前元素索引
(3)当前遍历数组
参数二:
thisarg callback中this指向
function deepClone (originObj){
let newObj = {};
for(var i in originObj){
let type = typeof(originObj[i]);
// typeof 返回值有 'number'/ 'string'/'undefined'/'boolean'/'object'/'function'.
//typeof null 和 array为'object'
if( type === 'object' ){
if( (originObj[i] + '') === 'null' ){
newObj[i] = originObj[i]
}else{
newObj[i] = deepClone(originObj[i])
}
}else{
newObj[i] = originObj[i]
}
}
return newObj
}
Array.prototype.myFilter = function(callback,thisarg){
let originArr = this,
length = this.length,
newArr = [];
thisarg = thisarg || window
for(var i = 0; i < originArr.length; i++){
let currentEle = deepClone(originArr[i]) , //新数组不应该继续引用原来数组的元素,所以要进行一次深拷贝
toReturn = callback.apply(thisarg, [currentEle, i, originArr] );
if(toReturn) { newArr.push(currentEle) }
}
return newArr
}
四、map callback函数执行时可以改变原数组。
遍历数组,对每个元素执行callback函数并返回执行结果(默认返回undefined),将执行结果以数组形式返回
Array.prototype.myMap = function(callback, thisarg){
let newArr = [];
thisarg = thisarg || window;
for(var i = 0; i < this.length; i++){
let currentEle = this[i], // 如果不想改变原数组,可以甚克隆当前元素
index = i,
result = callback.apply( thisarg, [currentEle, index, this] );
newArr.push(result)
}
return newArr
}