麻豆黑色丝袜jk制服福利网站-麻豆精品传媒视频观看-麻豆精品传媒一二三区在线视频-麻豆精选传媒4区2021-在线视频99-在线视频a

千鋒教育-做有情懷、有良心、有品質的職業教育機構

手機站
千鋒教育

千鋒學習站 | 隨時隨地免費學

千鋒教育

掃一掃進入千鋒手機站

領取全套視頻
千鋒教育

關注千鋒學習站小程序
隨時隨地免費學習課程

當前位置:首頁  >  技術干貨  > 腳本對象引用及其副本

腳本對象引用及其副本

來源:千鋒教育
發布人:syq
時間: 2022-09-19 14:08:05 1663567685

  通過引用傳遞和傳遞的值及其在 JavaScript 中的修改。

  腳本對象引用及其副本

腳本對象引用

  在處理 JavaScript 時,您將面臨與 JavaScript 如何處理其基元變量和非基元變量以及何時用作值或用作引用相關的混淆。使用值時,每種方法的工作方式都不同。

  今天,我們將討論JavaScript如何定義其引用和對象,以及它將如何在不同的場合處理它們。

  類型

  讓我們從基礎開始,有2種類型的JavaScript對象,即原始和非原始對象。基元類型包括字符串、數字、空、布爾型、BigInt、符號(新引入的)和未定義的。

  另一方面,非基元類型是存儲中的引用,因為它們沒有定義的存儲。非基元類型可以在存儲中變大,這就是為什么JS最好地將其視為也稱為對象的引用。每個對象都是從 G小葉對象類派生而來的。

  每個對象都有一個分配的標識符,該標識符保存其引用的值,就像常規變量標識符也具有其作用域和Unicode一樣。

  更新基元類型

  讓我們從基元類型開始并更新它們。我們將首先創建一個字符串變量并將其分配給另一個變量,然后更新新變量并比較輸出。

1

  基元類型示例

  以下程序的輸出將是唯一的,并指出每個基元值將保存在另一個內存地址中:

  Output - test another test

  更新非基元類型

  當我們使用非基元類型時,期望是不同的。我們將執行與上述相同的操作,但不是更新值,而是更新內部的屬性。

2

  非基元類型示例

  在這種情況下,輸出將更新原始對象,因為它們指向相同的位置:

  Output - { name: 'another test' }

  我們可以通過使用來克隆對象,并且值將有所不同。例如Object.assign

3

  使用對象分配

  在這種情況下,輸出將不同,結果將打印原始對象,因為它們指向不同的內存地址:

  Output - { name: 'test' }

  如果我們嵌套了非原始屬性呢?

  我們正在嘗試的示例將屬性指向基元類型,但如果任何一個屬性是非基元的呢?

  讓我們看看預期的場景,我們將在對象內再創建一個非原始屬性,并將嘗試更新最新的對象并將其與現有對象進行比較:

4

  對嵌套對象使用對象分配

  該程序的輸出將是:

  Output - { name: 'test', properties: { location: 'location two' } }

  現在,這是一件有趣的事情,屬性是原始的,因此具有不同的位置,但是是非原始的,并且與 共享相同的地址,并且在更新時也會更新嵌套對象。這是因為只在頂級創建屬性,而不執行嵌套克隆。namepropertiesobj.propertiesObject.assign

  對于嵌套克隆,有一些方法,例如 。structuredClone(node v17), recursive methods, JSON.parse(JSON.stringify(obj))and third party library

  將變量傳遞給函數

  當我們處理函數并傳遞值時,有兩種方式按值傳遞變量或按引用傳遞變量。首先,讓我們了解JavaScript將如何定義將變量傳遞給函數時要執行的操作。

  按值傳遞與按引用傳遞

  在JavaScript中,它從不顯式比較類型是值還是引用,但是當我們調用具有很少參數的方法時,會發生一個簡單的機制。腳本將創建輸入的副本。

  由于我們創建的每個函數都是 Function 類的導數,因此每個函數都有一個稱為數組的屬性,并分發給該方法。在此處閱讀有關參數的更多信息。arguments

  因為參數是非首字母類型。JavaScript 使用 rest 是作為數組傳遞的參數,當函數內的任何變量更新時,它是一個參數關鍵字進行更新。Object.assign(arguments, [...rest])

  由于我們創建了一個新的 Argument 實例,如果值是基元的,它將為非基元創建一個新地址,它將指向相同的實例變量。

  傳遞基元類型

  現在,我們知道函數將創建一個新變量,因此傳遞基元類型似乎沒有任何問題,并且變量將保持其原始狀態。

5

  將值傳遞給方法的基元示例

  以下程序的輸出將是其原始狀態,無需修改:

  Output - test

  傳遞非基元類型并更新其引用

  當傳遞非基元類型時,它還會創建一個副本,并且將引用該值。但是當更新引用時,它現在將指向另一個變量,因為我們向它提供了一個副本,而不是一個實際的對象。

6

  將值傳遞給方法的非基元示例

  以下程序的輸出仍將處于其原始狀態,無需進行任何修改,因為我們更新了引用本身:

  Output - { name: 'test' }

  傳遞非基元類型并更新其屬性

  按照上面的示例,如果我們更新引用,那么它將指向一個新的內存地址,但是如果我們更新屬性,那么它將更新值。

7

  將非基元值傳遞給方法和更新屬性的示例

  以下程序的輸出將不會處于其原始狀態,并且 name 屬性將分配一個新值,因為引用不會使用相同的標識符進行修改和更新。

  Output - { name: 'another test' }

  結論

  JavaScript是一種令人驚訝的語言,當在深層次上使用時,它的所有實現都有其調整。最復雜的情況是,當我們處理一個嵌套對象時,每個對象都有自己唯一的共享標識符。因此,建議使用所需的引用,并始終創建具有屬性的嵌套對象以避免沖突。Object.assign

tags:
聲明:本站稿件版權均屬千鋒教育所有,未經許可不得擅自轉載。
10年以上業內強師集結,手把手帶你蛻變精英
請您保持通訊暢通,專屬學習老師24小時內將與您1V1溝通
免費領取
今日已有369人領取成功
劉同學 138****2860 剛剛成功領取
王同學 131****2015 剛剛成功領取
張同學 133****4652 剛剛成功領取
李同學 135****8607 剛剛成功領取
楊同學 132****5667 剛剛成功領取
岳同學 134****6652 剛剛成功領取
梁同學 157****2950 剛剛成功領取
劉同學 189****1015 剛剛成功領取
張同學 155****4678 剛剛成功領取
鄒同學 139****2907 剛剛成功領取
董同學 138****2867 剛剛成功領取
周同學 136****3602 剛剛成功領取
相關推薦HOT
主站蜘蛛池模板: 日本tvvivodes人妖| 新婚熄与翁公试婚小说| 国产精品久久一区二区三区| 欧美性大战久久久久久| 91精品国产免费| 青青热久免费精品视频精品 | 波多野结大战三个黑鬼 | 成人小视频在线观看| 日韩精品一区二区三区在线观看 | 久久99精品久久久久久| 第四色播日韩第一页| 国产一级做a爰片...| 中文天堂在线www| 国产粉嫩嫩00在线正在播放| 性爱宝典| 久久精品日日躁精品| 全彩无修本子里番acg| 日本h无羞动漫在线观看网站| 久久久久久亚洲精品| 免费a级毛片18以上观看精品| 足本玉蒲团在线观看| 娃娃脸1977年英国| 看片91| 大胸小子bd在线观看| 亚洲人成伊人成综合网久久久| 日本一本高清| 久久精品国产99久久无毒不卡| 男女猛烈xx00免费视频试看| 玖玖色资源站| 男人j进女人j啪啪无遮挡动态| 久久天堂影院| 在线观看网站禁入口不用下载| 色播在线电影| 国产gay小鲜肉| 2020国产在线| yw在线观看成人免费| 五月深爱网| 亚洲妇熟xxxx妇色黄| 国产小鲜肉男同志gay| 国产国语一级毛片| 欧美性猛交xxxx乱大交高清|