1.JavaScript中的数组是一种特殊的对象。作为索引的数字在内部被转换为字符串类型,这是因为JavaScript对象的属性名必须是字符串。
var nums=[1,2,3]; var samenums=nums; nums[0]=0; console.log(samenums[0]); //0 这里是0,而不是复制过来时候的1.
for(var i=0;i<nums.length;i++){ samenums[i]=nums[i]; } 这时候我们再:nums[0]=0; console.log(samenums[0]) //1,这里依旧是1.
var a=[1,2]; var b= a.slice(0); a[0]=10; alert(b[0]) //1
var a={ ao:1, at:2 } var b=a; a.ao=2; alert(b.ao) //2 因为进行的是浅复制。
var a={ name: "John", location:{ city:"Boston", county:"USA" } } var b={}; $.extend(b,a); //这里是直接将a对象合并到b对象中去
a.name="zqz"; console.log(b.name); //依旧为 John
***************$.extend()是对jQuery的直接扩展$.fn.extend()是对jQuery的实例对象的扩展***************
var a={ name: "leslie", location:{ city:"beijing", county:"china" } } var b={ name:'zqz', location:{ city:'beijing', county:'mars', work:'ito' } }; $.extend(b,a); console.log(b); //结果:
{ location:{ city:"beijing", county:"china" }, name:"leslie" }
var a={ name: "leslie", location:{ city:"beijing", county:"china" } } var b={ name:'zqz', location:{ city:'beijing', county:'mars', work:'ito' } } var c={ location:{ city:'wuhan', county:'mars', work:'itos', hobby:'study' } } $.extend(a,b,c); console.log(a); //结果
a={ location:{ city:'wuhan', county:'mars', work:'itos', hobby:'study' }, name:'zqz' }
五、Jquery的extend方法还有一个重载原型:
extend(boolean,dest,src1,src2,src3...)
第一个参数boolean代表是否进行深度拷贝,其余参数和前面介绍的一致,什么叫深层拷贝,我们看一个例子:
var result=$.extend( true, {},
{ name: "John", location: {city: "Boston",county:"USA"} },
{ last: "Resig", location: {state: "MA",county:"China"} } );
我们可以看出src1中嵌套子对象location:{city:"Boston"},src2中也嵌套子对象location:{state:"MA"},第一个深度拷贝参数为true,那么合并后的结果就是:
result={name:"John",last:"Resig",location:{city:"Boston",state:"MA",county:"China"}}
也就是说它会将src中的嵌套子对象也进行合并,而如果第一个参数boolean为false,我们看看合并的结果是什么,如下:
var result=$.extend( false, {},
{ name: "John", location:{city: "Boston",county:"USA"} },
{ last: "Resig", location: {state: "MA",county:"China"} }
);
那么合并后的结果就是:
result={name:"John",last:"Resig",location:{state:"MA",county:"China"}}