深拷贝+封装
window.onload = function(){
var obj = {
"name":'small',
id:1,
age:18,
arr:[1,2,3],
o2:{id:2},
action:function(){
}
};
//属性的设置和获取 . []区别?.取自身的属性 []可以设置变量
var obj2 = {};
obj2.name = 'abc';
obj2['age'] = 18;
var obj2 = {};
obj2.name = 'abc'
obj2.age = 22;
//获取
obj2.name; //字符串
var a = "age";
obj2[a]; //[变量]
//删除
delete obj2.age //obj2[a] obj2['age']
console.log(obj2); //{ name: 'abc' }
//检测属性
//in 运算符 检测属性是否存在于某个对象中,自有属性和继承属性都返回true
//hasOwnProperty() 方法用于检测属性是否是自有属性,是则返回true,否则返回false
var obj = {
"name":'small',
id:1,
age:18,
arr:[1,2,3],
o2:{id:2},
action:function(){
}
};
// console.log('name' in obj); //true
console.log('o2' in obj); //true
// console.log(obj.hasOwnProperty('age')); //true
console.log(obj.hasOwnProperty('id'))
//区别
// function Test(){};
// Test.prototype.name = 'abc'; //继承属性
// var test = new Test(); //实例化
// test.age = 18; //自有属性
// console.log('name' in test); //true
// console.log(test.hasOwnProperty('name')); //false
function Test(){};
Test.prototype.name = 'name';
var test = new Test();
test.age = 18;
console.log('name' in test);
console.log(test.hasOwnProperty('name'))
//对象循环遍历 for in
// var obj = {
// "name":'fangfang',
// id:1,
// age:18,
// };
var obj = {
"name":"jy",
id:001,
age:22,
Number:20151306314,
grade:99
}
// for(var key in obj){
// console.log(key);
// console.log(obj[key]); // obj[key] ===value
// };
for(var key in obj){
// console.log(key)
console.log(key,obj[key])
}
var arr = ['a','b','c','d','e'];
for(var i in arr){
// console.log(i); //i 索引 0 1 2 3 4 。。。
console.log(i,arr[i]); //arr[i] == 'a','b','c'
};
//数组的属性和方法
//for forEach() map()
// var arr = ['a','b','c'];
// for(var i=0;i<arr.length;i++){
// console.log(arr[i]);
// };
// arr.forEach(function(item,index){ //item = arr[i]
// console.log(item)
// });
// arr.map(function(item,index){ //item = arr[i]
// console.log(item)
// });
var arr = ['x','y','z']
for(var i=0;i<arr.length;i++){
console.log(i,arr[i])
}
arr.forEach(function(item,index){
console.log(item)
})
arr.map(function(item,index){
console.log(item)
})
//forEach()没有返回值 map()的区别
var arr2 =[100,200,300];
// var a = arr2.forEach(function(item,index){ //item = arr[i]
// return item+'kg'
// });
// console.log(a); //undefined forEach()没有返回值
var b = arr2.map(function(item,index){ //item = arr[i]
return item+'kg'
});
console.log(b); //[ '100kg', '200kg', '300kg' ]
//
var arr3 = [{id:1,name:'a1'},{id:2,name:'a2'},{id:3,name:'a3'}];
var c = arr3.map(function(item,index){
return item.name
});
console.log(c); //[ 1, 2, 3 ]
console.log(arr3) //[ { id: 1, name: 'a1' }, { id: 2, name: 'a2' }, { id: 3, name: 'a3' } ]
//[{name:'a1'},{name:'a2'},{name:'a3'}];
var d = arr3.map(function(item,index){
return {name:item.name}
});
console.log(d); //[ { name: 'a1' }, { name: 'a2' }, { name: 'a3' } ];
//filter() 筛选 返回的满足条件的数组
//every() 检测 都满足条件返回true,只要有一个没有满足返回false
//some() 检测 如果有一个满足,返回true,没有满足,返回false
//数组大于30的值
var arr4 = [20,30,50,15,200];
var x = arr4.filter(function(item,index){
return item >30
});
console.log(x,arr4); //[ 50, 200 ][ 20, 30, 50, 15, 200 ]
var arr3 = [{id:1,name:'a1'},{id:2,name:'a2'},{id:3,name:'a3'}];
var x33 = arr3.filter(function(item,index){
//return item.name!= 'a1'
return item.id>2
});
console.log(x33,arr3); //[ { id: 2, name: 'a2' }, { id: 3, name: 'a3' } ]
//every每一个都要满足条件是&&的关系
var arr4 = [20,30,50,15,200];
var y= arr4.every(function(item,index){
return item >10
});
console.log(y); //true
//some是或的关系,只要有一个满足条件就可以
var arr4 = [20,30,50,15,200];
var z= arr4.some(function(item,index){ //item 元素 index 索引
return item >30
});
console.log(z); //true
//reduce() 累加器
// var arr5 = [15,10,15];
// var z2 = arr5.reduce(function(total,cur){ //total 每次累加后的结果 cur 当前元素
// return total+cur
// },5); //5初始化
// console.log(z2); //45
var arr5 = [10,20,30,40];
var z2 = arr5.reduce(function(total,cur){
return total+cur
}) //不初始化
console.log(z2)
var arr5 = [10,20,30,40];
var z2 = arr5.reduce(function(total,cur){
return total+cur
}) //不初始化
console.log(z2)
var obj = {
"name":'fangfang',
id:1,
age:18,
arr:[1,2,3],
o2:{id:2},
action:function(){
}
};
//slice切割
var arr1=['a','b'],arr2=arr1.concat();
console.log(arr1);//["a","b"]
console.log(arr2);//["a","b"]
arr2[0]='c';//修改arr2
console.log(arr1);//["a","b"]
console.log(arr2);//["c","b"]
//concat替换
var arr = [1,2,3];
var arr2 = arr.concat();
arr2.push(5);
console.log(arr); //[ 1, 2, 3, 5 ]
var arr1=['a','b'],arr2=arr1.concat();
console.log(arr1);//["a","b"]
console.log(arr2);//["a","b"]
arr2[0]='c';//修改arr2
console.log(arr1);//["a","b"]
console.log(arr2);//["c","b"]
//序列化 JSON.parse(JSON.stringify(obj)) 对象转换为json字符串
var obj = {
name:'fangfang',
id:1,
age:18,
o2:{id:2},
action:function(){}
};
var obj3 = JSON.parse(JSON.stringify(obj));
obj.o2.id = 999;
console.log(obj3);
console.log(obj);
// Object.assign()
var obj1 = {a:1,b:2};
var obj2 = {b:10,c:20};
Object.assign(obj1,obj2) ;
console.log(obj1); //{ a: 1, b: 10, c: 20 }
var obj1 = {a:1,b:2,sub:{c:3}};
function f(o2){
var o = {};
Object.assign(o,o2) ;
return o;
};
var a = f(obj1);
obj1.a = 99;
a.sub.c = 'aaaaa';
console.log(obj1); //{ a: 99, b: 2, sub: { c: 'aaaaa' } }
console.log(a); //{ a: 1, b: 2, sub: { c: 'aaaaa' } }
//封装一个方法 deep来实现对象的深拷贝 *****
var Animal={
name: "duobi",
skin: ["red", "green"],
child: {
xxx: "xxx"
},
say: function(){
console.log("I am ", this.name, " skin:", this.skin)
}
}
console.log(Animal)
function deep(dest, obj){
var o = dest;
for (var key in obj) {
if (typeof obj[key] === 'object'){
o[key] = (obj[key].constructor===Array)?[]:{};
deep(o[key], obj[key]);
} else {
o[key] = obj[key]
}
}
return o;
};
var x = deep({},Animal);
}
标签:console,log,item,obj,var,封装,拷贝,name From: https://www.cnblogs.com/jycom/p/16656408.html