国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

js中對(duì)象進(jìn)行賦值操作的幾種方式

這篇具有很好參考價(jià)值的文章主要介紹了js中對(duì)象進(jìn)行賦值操作的幾種方式。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

最近開發(fā)碰到多參數(shù)賦值的問題,參數(shù)之間總是互相影響,導(dǎo)致出現(xiàn)一些奇怪的bug,查閱了相關(guān)資料,全部在這里了,記錄一下,希望可以幫到有需要的人

一、= 賦值

let obj1 = {name: '小明', age: 10};
let obj2 = obj1;
obj1.age = 20;
console.log(obj2.age); // 輸出20

上述代碼中,obj1和obj2指向了同一塊內(nèi)存區(qū)域,修改obj1的age屬性,也會(huì)影響到obj2的age屬性。這是因?yàn)閛bj2只是復(fù)制了obj1的引用,指向的是同一塊內(nèi)存地址。

二、淺拷貝

淺拷貝是指將一個(gè)對(duì)象的屬性值復(fù)制到另一個(gè)對(duì)象中,如果屬性值是引用類型,那么只是復(fù)制了它的引用地址,而原對(duì)象和新對(duì)象的引用指向了同一個(gè)地址。這樣,在修改新對(duì)象中的屬性時(shí),原對(duì)象相應(yīng)的屬性也會(huì)改變。 下面是一個(gè)淺拷貝的例子:

    
const originalObj = {a:1, b:{c:2}};
const newObj = Object.assign({}, originalObj);
newObj.b.c = 3;
console.log(originalObj.b.c); // 輸出 3
console.log(newObj.b.c); // 輸出 3
    

在上面的例子中,我們使用了Object.assign方法對(duì)原對(duì)象進(jìn)行淺拷貝,并將新對(duì)象賦值給了newObj。然后,我們修改了新對(duì)象中b屬性的c值,結(jié)果發(fā)現(xiàn)原對(duì)象相應(yīng)的屬性也發(fā)生了改變。

三、深拷貝

深拷貝是指復(fù)制一個(gè)對(duì)象及其對(duì)象的所有子對(duì)象的值,并將它們都復(fù)制到一個(gè)新對(duì)象中,這樣原對(duì)象和新對(duì)象沒有任何關(guān)聯(lián),修改新對(duì)象中的屬性不會(huì)影響原對(duì)象。 下面是一個(gè)深拷貝的例子:

    
const originalObj = {a:1, b:{c:2}};
const newObj = JSON.parse(JSON.stringify(originalObj));
newObj.b.c = 3;
console.log(originalObj.b.c); // 輸出 2
console.log(newObj.b.c); // 輸出 3
    

在上面的例子中,我們使用了JSON的parse和stringify方法對(duì)原對(duì)象進(jìn)行深拷貝,并將新對(duì)象賦值給了newObj。然后,我們修改了新對(duì)象中b屬性的c值,結(jié)果發(fā)現(xiàn)原對(duì)象相應(yīng)的屬性沒有發(fā)生改變。 需要注意的是,深拷貝需要注意循環(huán)引用的問題。如果原對(duì)象中存在循環(huán)引用的情況,深拷貝會(huì)陷入死循環(huán),需要我們自己手動(dòng)處理。

四、ES6展開運(yùn)算符

展開運(yùn)算符可以將一個(gè)對(duì)象中的所有屬性展開,并將它們作為新對(duì)象的屬性,從而實(shí)現(xiàn)對(duì)象的賦值。 下面是一個(gè)展開運(yùn)算符的例子:

    
const originalObj = {a:1, b:{c:2}};
const newObj = {...originalObj};
newObj.b.c = 3;
console.log(originalObj.b.c); // 輸出 2
console.log(newObj.b.c); // 輸出 3
    

在上面的例子中,我們使用了展開運(yùn)算符對(duì)原對(duì)象進(jìn)行了復(fù)制,并將新對(duì)象賦值給了newObj。然后,我們修改了新對(duì)象中b屬性的c值,結(jié)果發(fā)現(xiàn)原對(duì)象相應(yīng)的屬性沒有發(fā)生改變。 需要注意的是,展開運(yùn)算符也只能實(shí)現(xiàn)淺拷貝,和Object.assign一樣,新對(duì)象中的引用類型屬性只是復(fù)制了一個(gè)引用地址。

五、結(jié)合ES6的解構(gòu)賦值

結(jié)合ES6的解構(gòu)賦值,我們可以快捷地對(duì)一個(gè)對(duì)象進(jìn)行賦值。解構(gòu)賦值可以同時(shí)為多個(gè)變量賦值,也可以為對(duì)象中的某個(gè)屬性賦值。使用解構(gòu)賦值,我們可以非常便捷地對(duì)一個(gè)對(duì)象進(jìn)行復(fù)制或者拆分。 下面是一個(gè)解構(gòu)賦值的例子:

    
const originalObj = {a:1, b:{c:2}};
const { ...newObj } = originalObj;
newObj.b.c = 3;
console.log(originalObj.b.c); // 輸出 2
console.log(newObj.b.c); // 輸出 3
    

在上面的例子中,我們使用了解構(gòu)賦值對(duì)原對(duì)象進(jìn)行了復(fù)制,并將新對(duì)象賦值給了newObj。然后,我們修改了新對(duì)象中b屬性的c值,結(jié)果發(fā)現(xiàn)原對(duì)象相應(yīng)的屬性沒有發(fā)生改變。

六、使用Object.getOwnPropertyDescriptors

我們還可以使用Object.getOwnPropertyDescriptors方法來拷貝對(duì)象。Object.getOwnPropertyDescriptors方法可以獲取對(duì)象所有屬性的描述符,包括屬性方法、可枚舉性、可配置性、可寫性等等。 下面是一個(gè)使用Object.getOwnPropertyDescriptors方法的例子:

    
const originalObj = {a:1, b:{c:2}};
const newObj = Object.defineProperties({}, Object.getOwnPropertyDescriptors(originalObj));
newObj.b.c = 3;
console.log(originalObj.b.c); // 輸出 2
console.log(newObj.b.c); // 輸出 3
    

在上面的例子中,我們使用了Object.getOwnPropertyDescriptors方法和Object.defineProperties方法對(duì)原對(duì)象進(jìn)行了復(fù)制,并將新對(duì)象賦值給了newObj。然后,我們修改了新對(duì)象中b屬性的c值,結(jié)果發(fā)現(xiàn)原對(duì)象相應(yīng)的屬性沒有發(fā)生改變。

七、結(jié)合函數(shù)實(shí)現(xiàn)對(duì)象的賦值

我們還可以結(jié)合函數(shù)來實(shí)現(xiàn)對(duì)象的賦值。函數(shù)在實(shí)現(xiàn)對(duì)象復(fù)制時(shí),可以調(diào)用Object.assign或者JSON.parse(JSON.stringify())方法實(shí)現(xiàn)淺拷貝和深拷貝。 下面是一個(gè)結(jié)合函數(shù)實(shí)現(xiàn)對(duì)象賦值的例子:

    
function copyObj(obj, flag){
    if(flag){
        return JSON.parse(JSON.stringify(obj));
    }else{
        return Object.assign({}, obj);
    }
}
const originalObj = {a:1, b:{c:2}};
const newObj = copyObj(originalObj, true);
newObj.b.c = 3;
console.log(originalObj.b.c); // 輸出 2
console.log(newObj.b.c); // 輸出 3
    

在上面的例子中,我們通過編寫copyObj函數(shù)來實(shí)現(xiàn)對(duì)象的復(fù)制,并將原對(duì)象和深拷貝標(biāo)識(shí)傳入函數(shù)中。然后,我們使用函數(shù)來復(fù)制原對(duì)象,將新對(duì)象賦值給了newObj。最后,我們修改了新對(duì)象中b屬性的c值,結(jié)果發(fā)現(xiàn)原對(duì)象相應(yīng)的屬性沒有發(fā)生改變。

借鑒于?JS對(duì)象賦值給另一個(gè)對(duì)象_筆記大全_設(shè)計(jì)學(xué)院文章來源地址http://www.zghlxwxcb.cn/news/detail-788341.html

到了這里,關(guān)于js中對(duì)象進(jìn)行賦值操作的幾種方式的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • js常用的幾種排序方式

    在JavaScript中,有多種排序方式可供選擇。以下是幾種常見的排序方式以及對(duì)應(yīng)的示例: 冒泡排序(Bubble Sort): 冒泡排序是一種比較簡單的排序算法,它重復(fù)地比較相鄰的兩個(gè)元素并交換位置,直到整個(gè)數(shù)組排序完成。 插入排序(Insertion Sort): 插入排序的思想是將數(shù)組分

    2024年02月14日
    瀏覽(26)
  • js刪除數(shù)組的幾種方式

    注意: 此方法改變數(shù)組的長度! 提示: 移除數(shù)組末尾的元素可以使用 pop() 方法。 slice() 方法可提取字符串的某個(gè)部分,并以新的字符串返回被提取的部分。 注意: slice() 方法不會(huì)改變?cè)紨?shù)組。 注意:這種方法會(huì)改變?cè)紨?shù)組。 返回值 如果刪除一個(gè)元素,則返回一個(gè)元素

    2024年02月16日
    瀏覽(26)
  • java中對(duì)象和Map互相轉(zhuǎn)換的幾種方式

    在Java中,將對(duì)象和Map相互轉(zhuǎn)換是常見的操作,可以通過不同的方式實(shí)現(xiàn)這種轉(zhuǎn)換。以下是幾種常見的方法以及示例說明: 1. 使用Hutool工具類 Hutool是一個(gè)優(yōu)秀的Java工具包,提供了豐富的工具方法,其中就包括對(duì)象和Map之間轉(zhuǎn)換的工具方法。 示例: Hutool的 BeanUtil 提供了 bean

    2024年02月03日
    瀏覽(21)
  • js判斷是否為數(shù)字的幾種方式

    typeof typeof 判斷值是不是基本類型 number : instanceof instanceof 判斷值是不是包裝類 Number : Number.isInteger Number.isInteger 判斷值是否是 整數(shù) : 這幾種方式的缺點(diǎn),都是只能基于類型判斷,無法判斷字符串是否是數(shù)值。 parseInt 和 parseFloat 解析的時(shí)候遇到非法字符結(jié)束,返回解析到

    2024年02月16日
    瀏覽(18)
  • js fetch請(qǐng)求中斷的幾種方式

    js fetch請(qǐng)求中斷的幾種方式

    這是官方標(biāo)準(zhǔn)手段,真正意義的阻止請(qǐng)求(不支持ie) 后端接口設(shè)置的兩秒返回?cái)?shù)據(jù) 默認(rèn)結(jié)果: 解開定時(shí)器后: 通過promise,成功用resolve返回,失敗用reject返回(瀏覽器上,請(qǐng)求依然會(huì)發(fā)出,并得到響應(yīng)) 第一種方法: 運(yùn)行結(jié)果: 第二種方法:

    2024年02月12日
    瀏覽(26)
  • js去除字符串空格的幾種方式

    方法1: (最常用)全部去除掉空格 ?var str = \\\' ?abc d e f ?g \\\'; ? ? ? ? function trim(str) { ? ? ? ? ? ? var reg = /[trfns]*/g; ? ? ? ? ? ? if (typeof str === \\\'string\\\') { ? ? ? ? ? ? ? ? var trimStr = str.replace(reg,\\\'\\\'); ? ? ? ? ? ? } ? ? ? ? ? ? console.log(trimStr) ? ? ? ? } ? ? ? ? trim(str) 方

    2024年02月09日
    瀏覽(23)
  • js中追加數(shù)據(jù)到數(shù)組的幾種方式

    在JavaScript中,有多種方式可以向數(shù)組中追加數(shù)據(jù),包括: push()方法:將一個(gè)或多個(gè)元素添加到數(shù)組的末尾,并返回新數(shù)組的長度。 var arr = [1, 2, 3]; arr.push(4); console.log(arr); // [1, 2, 3, 4] unshift()方法:將一個(gè)或多個(gè)元素添加到數(shù)組的開頭,并返回新數(shù)組的長度。 var arr = [2, 3, 4

    2024年02月15日
    瀏覽(16)
  • 【java】對(duì)ArrayList中的元素進(jìn)行排序的幾種方式

    【java】對(duì)ArrayList中的元素進(jìn)行排序的幾種方式

    一、使用Collections工具類 1、對(duì)基本類型排序 通過 Collections.sort() 對(duì)基本類型排序默認(rèn)是以升序排序 2、對(duì)字符串類型排序 對(duì)字符串類型排序默認(rèn)按照首字母a-z排序 3、對(duì)對(duì)象排序 如何使用Collections對(duì)對(duì)象排序呢? 其實(shí)只需要讓我們的數(shù)據(jù)類型實(shí)現(xiàn)Comparable接口即可,下面定義

    2024年02月09日
    瀏覽(25)
  • 常用的將Java的String字符串轉(zhuǎn)具體對(duì)象的幾種方式

    常用的將Java的String字符串轉(zhuǎn)具體對(duì)象的幾種方式

    Java對(duì)象以User.class為例 ,注意:代碼中使用到了lombok的@Data注解 以上就是常用的幾種String轉(zhuǎn)具體的java對(duì)象操作

    2024年04月11日
    瀏覽(40)
  • js逆向·找到登錄時(shí)目標(biāo)網(wǎng)站的加密算法的幾種方式

    js逆向·找到登錄時(shí)目標(biāo)網(wǎng)站的加密算法的幾種方式

    為什么要去找到目標(biāo)網(wǎng)站的加密密碼方法: 為了要把我們的payload正確的帶入目標(biāo)網(wǎng)站的服務(wù)器進(jìn)行邏輯驗(yàn)證,那么就需要知道對(duì)方使用的什么加密或者編碼規(guī)則來處理數(shù)據(jù)的,比如說我們輸入的密碼被base64編碼了,然后發(fā)送給后端,后端會(huì)進(jìn)行解碼過后再帶入邏輯驗(yàn)證中去

    2024年02月08日
    瀏覽(31)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包