JavaScript引用傳遞問題(深拷貝,淺拷貝)

2021-09-10 17:37:36 字數 1055 閱讀 6122

基本資料型別都是值傳遞 不會存在引用問題,

陣列和物件會存在問題(例:某個地方某個物件的屬性改變後,之前使用這個物件的地方的這個值會改變),有時候就會莫名其妙的不知道怎麼值變啦(針對沒遇到過這種問題的,遇到過的後面寫就盡量避免,怎麼避免?那就用深拷貝咯),這裡就需要用深拷貝啦,可以理解成新開乙個位址來儲存這個物件。

jquery: 

jquery.extend() 函式用於將乙個或多個物件的內容合併到目標物件。

注意:1. 如果只為$.extend()指定了乙個引數,則意味著引數target被省略。此時,target就是jquery物件本身。通過這種方式,我們可以為全域性物件jquery新增新的函式。

2. 如果多個物件具有相同的屬性,則後者會覆蓋前者的屬性值。

$.extend( target [, object1 ] [, objectn ] )

指示是否深度合併

$.extend( [deep ], target, object1 [, objectn ] )

警告:不支援第乙個引數傳遞 false 。

引數描述

deep

可選。 boolean型別 指示是否深度合併物件,預設為false。如果該值為true,且多個物件的某個同名屬性也都是物件,則該"屬性物件"的屬性也將進行合併。

target

object型別 目標物件,其他物件的成員屬性將被附加到該物件上。

object1

可選。 object型別 第乙個被合併的物件。

objectn

可選。 object型別 第n個被合併的物件。

js:1.迴圈遍歷到最裡面的基礎型別值然後重新賦值給新的值  (簡單的如下,如果還有多層就繼續遞迴)

function deepcopy(obj) ;

for (var key in obj) else }}

return result;

}2.object.assign(target,...sources); ( 這個方法只能實現一層的拷貝,如果是多層的要用js  還是建議用遞迴迴圈)

JavaScript 按值傳遞 按引用傳遞

1 值的比較 引用的比較 首先,原始值的比較是值的比較 只有在它們值相等的時候它們才相等 比如簡單的 var a1 10 var a2 10 console.log a1 a2 true 其次,物件的比較並非值的比較 物件的比較均是引用的比較,當且僅當它們引用同乙個基物件時,它們才相等。即使兩個物件...

引用傳遞 值傳遞

下面的程式闡述了值傳遞與應用傳遞的區別。package com.liaojianya.chapter1 this program demonstrates the use of array reference.author liao jianya 2016年7月21日 public class ar...

值傳遞,引用傳遞,指標傳遞

最近一直被c 的值傳遞,引用傳遞,指標傳遞這些概念所困擾,一直沒有乙個能說清他們之間的關係通過乙個簡單的例項,或者說淺顯的說法,找了一些相關資料,和自已的個人感受,簡單介紹一下,希望高人指正 c 中傳遞引數的方式有三種 傳引數的值 稱為值傳遞,簡稱傳值 傳引數的位址 稱為位址傳遞,簡稱為傳址 和引用...