原文: $.extend(true,{},a,b)解析 版權聲明: https://blog.csdn.net/bsfz_2018/article/details/81738437
什麼是$.extend
jQuery.extend() 函數用于将一個或多個對象的内容合并到目标對象。
$.extend(true,{},a,b)
true:是否深度拷貝,不加為false,淺拷貝,加了深拷貝
{}:将合并結果儲存到新對象,這樣原對象将不會發生改變
a:第一個合并的對象
b:第二個合并的對象
淺拷貝
var defaults = {name:"張三",age:18,sex:"true",scores:{chinese:70,science:100}};
var options = {name:"李四",age:20,scores:{chinese:98,math:99,english:100}};
var settings = $.extend(defaults,options);
console.log(defaults);
console.log(options);
console.log(settings);
結果:

可以發現原對象發生改變,規則:a對象和b對象相同的部分,b覆寫a,不同的部分,a保留,b追加到a中
深拷貝
var defaults = {name:"張三",age:18,sex:"true",scores:{chinese:70,science:100}};
var options = {name:"李四",age:20,scores:{chinese:98,math:99,english:100}};
var settings = $.extend(true,defaults,options);
console.log(defaults);
console.log(options);
console.log(settings);
結果可以發現b不是像淺拷貝一樣屬性中的對象分數完全被覆寫,而是分數對象中的屬性b覆寫a中相同的,b不同的追加,a中的保留
儲存到新對象,不改變a對象的值
var defaults = {name:"張三",age:18,sex:"true",scores:{chinese:70,science:100}};
var options = {name:"李四",age:20,scores:{chinese:98,math:99,english:100}};
var settings = $.extend(true,{},defaults,options);
console.log(defaults);
console.log(options);
console.log(settings);
可以看出a對象沒有發生改變,不同于上面第二個例子,即單純的深度拷貝。這個例子的結果即使新對象{}被填充資料的結果