merge的作用是将参数的key,value值合并,后面的覆盖前面的,然后统一写入返回值中
如果参数的key是一个引用类型,则传入的是引用类型的地址,所以后面的覆盖会影响到原来的值(也仅仅只影响到最后一个覆盖的值,因为其仅仅指向的是最后一个值的地址)
如果key是一个基本类型,则仅仅只是复制一个值传入,所以后面的覆盖就不会影响到原来的值
YUI().use('node', 'dump', function(Y) {
var set1 = {foo: true};
var set2 = {foo: "for"};
Y.log("1 : "+ Y.dump(set1)); //{foo => true}
Y.log("2 : "+ Y.dump(set2)); //{foo => for}
var a = Y.merge(set1, set2); //{foo: "for"}
Y.log("3 : "+ Y.dump(a)); //{foo => for}
a.foo = "kaka";
Y.log("1 : "+ Y.dump(set1)); //{foo => true}
Y.log("2 : "+ Y.dump(set2)); //{foo => for}
Y.log("3 : "+ Y.dump(a)); //{foo => kaka}
var set3 = {
obj:{}
};
var copy = Y.merge(set3);
Y.log("4 : "+Y.dump(copy)); //{obj => {}}
set3.obj.mam = "sss";
Y.log("4 : "+Y.dump(set3)); //{obj => {mam => sss}}
Y.log("4 : "+Y.dump(copy)); //{obj => {mam => sss}}
Y.log("4 : "+Y.dump(copy.obj)); //{mam => sss}
Y.log(copy === set3?"true":"false"); //false
Y.log(copy.obj === set3.obj?"true":"false"); //true
var set4 = {
obj: {
make: "make"
}
};
var set5 = {
obj: {
make: "nomake"
}
};
Y.log("4 : "+Y.dump(set4)); //{obj => {make => make}}
Y.log("4 : "+Y.dump(set5)); //{obj => {make => nomake}}
var copyhere = Y.merge(set4, set5);
Y.log("4 : "+Y.dump(set4)); //{obj => {make => make}}
Y.log("4 : "+Y.dump(set5)); //{obj => {make => nomake}}
Y.log("4 : "+Y.dump(copyhere)); //{obj => {make => nomake}}
copyhere.obj.make = "fake";
Y.log("4 : "+Y.dump(set4)); //{obj => {make => make}}
Y.log("4 : "+Y.dump(set5)); //{obj => {make => fake}}
Y.log("4 : "+Y.dump(copyhere)); //{obj => {make => fake}}
});
其中 dump的作用是将一个数组或者对象以字符串的形式返回