對象的深度拓展$.extend(true,{},a,b),深入理解,小心陷阱
轉載:https://www.cnblogs.com/DJeanWeb/p/4388689.html
$.extend
一般情景下,使用深度拓展兩個對象時,我們想要的效果是,b對象覆蓋掉a對象中存在的所有屬性,沒有則新增到a對象中;
下面我們看一下我所遇到的問題:
我希望通過深度拓展將tmp中的editoption覆蓋掉ret中的editoption;所以采用了深度拓展方法 ret = $.extend(true,{},ret,tmp);
但結果並沒有達到我想要的效果:
對象屬性中的數組長度依然沒有發生變化。
通過樣例比較發現,數組長度雖然沒有發生變化,但是數組前排列在前8位的值發生了改變,也就是是說,變量深度拓展覆蓋到了數組的值,而不是覆蓋掉整個數組對象。
![clip_image006 技術分享圖片](http://image.bubuko.com/info/201806/20180607130011275058.jpg)
註意如果直接使用$.extend(a,b)將改變a對象值。註意對象引用引發的神奇bug
因為$.extend(a,b)返回的是將a通過與b融合以後的結果,a對象會被改變。
最後我直接使用$.extend({},a,b)解決此需求:即不改變a,b對象的引用,也返回了我想要的值。
總結:即使簡單的方法,也需深入理解,避免潛意識裏的認知幹擾對事物的判斷。
對象的深度拓展$.extend(true,{},a,b),深入理解,小心陷阱
相關推薦
對象的深度拓展$.extend(true,{},a,b),深入理解,小心陷阱
com ges 深入理解 沒有 裏的 事物 cnblogs wid 希望 轉載:https://www.cnblogs.com/DJeanWeb/p/4388689.html $.extend一般情景下,使用深度拓展兩個對象時,我們想要的效果是,b對象覆蓋掉a對象中存在的
43.對象深度克隆
utf blog neo view lose splay cfa display aps 1 <!DOCTYPE html> 2 <html> 3 <head lang="en"> 4 <meta charset
java-IO流(File對象-深度遍歷指定目錄下的文件夾和文件)
true file turn ren 文件夾 int tsa http absolut 需求:遍歷這個樹狀結構 File(String pathname) ‘\\‘為了轉義‘\‘ // 通過抽象路徑pathname 創建一個新的文件或者目錄 Fil
ES6必知必會 (三)—— 數組和對象的拓展
prop div BE targe 繼承 常見 屬性和方法 include 表達式 數組的擴展 1.拓展運算符(‘...‘),它相當於rest參數的逆運算,用於將一個數組轉換為用逗號分隔的參數序列; console.log(...[1, 2, 3]) // 1 2 3 c
C#對象深度克隆
泛型 add img 公共屬性 內存地址 erl 分享圖片 指向 集合 有基礎的開發者都應該很明白,對象是一個引用類型,例如: object b=new object(); object a=b; 那麽a指向的是b的地址,這樣在有些時候就會造成如果修改a的值,那麽b的
C# 訪問數據的時候報錯 (拒絕了對對象 'XXXX' (數據庫 'SHQY',架構 'dbo')的 SELECT 權限)
拒絕 select doc use 對象 car exe lec -- 拒絕了對對象 ‘XXXX‘ (數據庫 ‘SHQY‘,架構 ‘dbo‘)的 SELECT 權限 解決辦法 use [docareMZ]--docareMZ 數據庫名 GO GRANT SELECT O
拒絕了對對象 'sp_OACreate' (數據庫 'mssqlsystemresource',架構 'sys')的 EXECUTE 權限。
bsp clas repl setprop mss prop exe oam pla 執行一個存儲過程, 由於裏面使用到了一些 --創建對象 EXEC sp_OACreate ‘VBScript.RegExp‘, @objRegex OUT --設置屬性 EXE
[微軟]有兩個序列a,b,大小都為n,序列元素的值任意整數,無序; 要求:通過交換a,b中的元素,使[序列a元素的和]與[序列b元素的和]之間的差最小_利用排列組合思路解決_python版
+= 求和 ever tro 解決 turn 運行 main lis (原題出自微軟公司面試題)問題如下:有兩個序列a,b,大小都為n,序列元素的值任意整數,無序;要求:通過交換a,b中的元素,使[序列a元素的和]與[序列b元素的和]之間的差最小。例如:a=[100,99,
Python面向對象高級編程-__slots__、定制類,枚舉
成了 模塊 person 兩種方法 繼承 math end spa ... 當在類體內定義好各種屬性後,外部是可以隨便添加屬性的,Python中類如何限制實例的屬性? Python自帶了很多定制類,諸如__slots__,__str__ __slots__ __slot
python3 速查參考- python基礎 8 -> 面向對象基礎:類的創建與基礎使用,類屬性,property、類方法、靜態方法、常用知識點概念(封裝、繼承等等見下一章)
fde ODB 面向 繼承 普通 實參 使用 後者 people 基礎概念 1.速查筆記: #-- 最普通的類 class C1(C2, C3): spam = 42 # 數據
構造函數、原型對象、實例、隱式原型的理解
rect \n eof center func mark scrip 失敗 color (歡迎一起探討,如果有什麽地方寫的不準確或是不正確也歡迎大家指點,最後留了一個疑問,歡迎各位大神來探討~) PS: 內容中的__proto__可能會被markdown語法導致顯示為pr
題目:兩個乒乓球隊進行比賽,各出三人。甲隊為a,b,c三人,乙隊為x,y,z三人。已抽籤決定比賽名單。有人向隊員打聽比賽的名單,a說他不和x比,c說他不和x,z比,請程式設計序找出三隊賽手大的名單。
通過迴圈巢狀安排對戰順序,再用if語句判斷避免參賽的隊員重複,最後通過題目要求篩選出符合題意的對手。 public class Test18 { public static void main(String[] args) { char a,b,c; for(a = 'x'; a &l
給定A, B兩個整數,不使用除法和取模運算,求A/B的商和餘數
第一種辦法: 從小到大遍歷 for(i = 2 to A - 1) if(i * B > A) 商 = i- 1, 餘 = A - (i -1) * B 第二種辦法 二分法,在[2, A]中查詢滿足的解 第三種辦法 以除數為初始測試值,以2的指數
POJ-3243-Clever Y-擴充套件Bsgs演算法-已知a,c,p,和a^b=c(mod p),求b
【Description】 Little Y finds there is a very interesting formula in mathematics: XYmod Z=K X^Y mod\:Z=K XYmodZ=K
華為面試題(8分鐘寫出程式碼) 有兩個陣列a,b,大小都為n,陣列元素的值任意,無序; 要求:通過交換a,b中的元素,使陣列a元素的和與陣列b元素的和之間的差最小
先上程式碼 java程式碼: public class MinDiff { public static void main(String[] args){ int[] aa={2,5,4,3,1,0}; int[] bb={7,9,8,10,6,11}
有兩個序列a,b,大小都為n,序列元素的值任意整數,無序;要求:通過交換a,b中的元素,使[序列a元素的和
原題:有一序列a,大小為n,分為2部分,序列元素的值任意整形數,無序; 要求:通過交換a,b中的元素,使[序列a元素的和]與[序列b元素的和]之間的差最小,用python寫。 #coding=ut
通過a+b的二進位制運算,理解異或和與操作
網上見到一道題目,要求用與或非等邏輯運算實現計算a+b的題目。這裡我想借著這道題,記錄一下自己的思路,留作以後溫故。 假設 整數 a 、b都是正數 a = 6,二進位制表示為 0110 b = 4 ,二進位制表示為 0100 我們需要知道,上下對齊後,哪幾位需要進位,哪幾位
有兩個序列a,b,大小都為n,序列元素的值任意整形數,無序; 要求:通過交換a,b中的元素,使[序列a元素的和]與[序列b元素的和]之間的差最小。
整體思想是利用兩個列表和的差值絕對值大小判斷是否互動兩個列表的值#!/usr/bin/env python# coding=utf-8def abs_test(a,b): # 假設剛開始就是差值最小的 # 此時的差值絕對值為: min = abs(sum(a
python面試題,通過交換a,b中的元素,使[序列a和]與[序列b和]之間的差最小
sumb = sum(lstb) d = abs(suma-sumb) if d == 0: return d bExchange = False for indexa, ia in enumerate(lsta): i
兩個乒乓球隊進行比賽,各出三人。甲隊為a,b,c三人,乙隊為x,y,z三人。已抽籤決定比賽名單
看到一個面試題 寫了玩玩 import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.E