前端—JavaScript基础2
重构以下代码:(以面向对象的方式)
重构后:(其中this指针问题也可改成箭头函数)
对象类型判断
call函数
对象属性操作
//对象属性操作
//属性增加
var obj = {};
obj.name = "jack";
obj['age'] = 20;
var addr = "wh";
obj[addr] = "武汉"; //使用的变量
console.log(obj);
//属性删除
var obj2 = {};
obj2.name = "aaaaa";
obj2['age'] = 22;
delete obj2.name;
console.log(obj2);
//检测属性
var obj = {
name:"bbb",
age:23,
action:function(){
this.addr = "beijing"
}
}
obj.action();
console.log(obj);
//in
console.log('name' in obj)
//hasOwnProperty
console.log(obj.hasOwnProperty('age'))
//属性枚举 遍历
var arr = ['a','b','c','d'];
var obj = {name:"bbb",age:23}
//for in
for(var key in obj){
//属性名 属性值
console.log(key,obj[key])
}
for(var v in arr){
console.log(v,arr[v])
}
//for
for(var i=0;i<arr.length;i++){
console.log(arr[i])
//if(条件ok) 终止 return break;
}
//forEach 没有返回值
arr.forEach(function(item,index){
//不能终止
console.log(item)
})
//map -- 可修改数组的值 有返回值
var m = arr.map(function(item){ //循环每一个属性 并返回改变后的属性
return item+1;
})
//filter 过滤器 返回满足条件的数组
var f = arr.filter(item){
return item === 'c';
})
//every 返回true false 都必须满足条件
var e = arr.every(item){
return item === 'c';
})
//some 返回true false 满足其中一个即可
var e = arr.every(item){
return item === 'c';
})
//reduce
var arr = [1,3,5,7];
//总数 当前数
var s = arr.filter(total,currentValue){
return total+currentValue;
},10) //10初始值
//对象属性拷贝
//对象序列化与反序列化
//JSON --- 浏览器中对象
var obj = {name:"bbb",age:23};
console.log(JSON.stringify(obj));
var str = '{name:"bbb",age:23}';
console.log(JSON.parse(str))
深拷贝方法
function deep(dest,ori){ //dest目标对象 ori源对象
for(var i in ori){
if(typeof ori[i] === 'object'){
//递归 判断是数组还是对象
dist[i] = (ori[i].constructor === Array) ? []:{}; //初始化属性
deep(dest[i],ori[i]);
}else{
dest[i] = ori[i]; //非引用属性
}
}
return dest;
}
var a = deep({},Animal);