克隆
浅层克隆
var person = {
name : 'Mike' ,
age : 19 ,
subject : [ 'chinese' , 'math' , 'english' ] ,
score : {
Chinese : 90 ,
Math : 80 ,
English : 77
}
} ;
var person1 = { } ;
function clone ( origin, target ) {
for ( var prop in origin)
{
target[ prop] = origin[ prop]
}
}
clone ( person, person1)
此时person1 = person,但是当其中一个改变时,另一个也随之改变,只是浅层克隆
深层克隆
1. 遍历数组 for(var prop in origin)
2. 判断对象是否是原始值:用typeof()判断
3. 判断是数组还是对象
- toString
- instanceof
- constructor
4. 建立相应的数组或对象
5. 递归
将person克隆给person1,并且当其中一个改变时,另一个不受影响
var person = {
name : 'Mike' ,
age : 19 ,
subject : [ 'chinese' , 'math' , 'english' ] ,
score : {
Chinese : 90 ,
Math : 80 ,
English : 77
}
} ;
var person1;
function deepClone ( origin, target ) {
var target = target || { } ;
toStr = Object . prototype. toString;
arrStr = '[object Array]' ;
for ( var prop in origin)
{
if ( origin. hasOwnProperty ( prop) )
{
if ( origin[ prop] !== 'null' && typeof ( origin[ prop] ) == 'object' )
{
if ( toStr . call ( origin[ prop] ) == arrStr)
{
target[ prop] = [ ] ;
}
else
{
target[ prop] = { } ;
}
deepClone ( origin[ prop] , target[ prop] ) ;
}
else
{
target[ prop] = origin[ prop] ;
}
}
}
return target;
}
person1 = deepClone ( person, person1) ;
三目运算符
表达式1?表达式2:表达式3
1. 判断表达式1是否为真
2. 若为真,则取表达式2的值
3. 若为假,则取表达式3的值