js中Object类型和Array类型的变量被赋值(复制)给其他变量后,修改被赋值(复制)的新变量的值,会影响原始变量的值,这是为什么呢?
?
JavaScript中的Object和Array都是指針變量類型,例如我聲明??
let obj={a:1};let arr=[1,2,3];
其中的obj和arr存放的僅僅是對應的對象和數組內容所存放的內存地址值
當你用以下代碼賦值給另外的新變量的時候
let obj={a:1};let arr=[1,2,3];let obj_new=obj;let arr_new=arr;
我們對 obj_new 和 arr_new 的內容進行修改,原始的 obj 和 arr 變量的值也會發生變化
我擦!還能說人話嗎?
好啦,我來用通俗易懂的類比
你給翻譯翻譯,什么是TM的指針變量?
強哥,你給翻譯翻譯,什么TM的叫做TM的指針變量?
舉個例子:
如果“強哥”是一個指針變量 ,無論出現在哪里,你看到的只是“強哥”這兩個中文漢字,就如同一個別名。
當我們說“阿強”就是“強哥”,等同于把"強哥“賦值給了“阿強”。
如果后面強哥變胖了,那么阿強也變胖了。
如果后面阿強變瘦了,那么強哥也變瘦了。
也就是指針變量類似引用了一個實際客觀載體,就是一個別稱,當我們把這個別稱賦給任何另外的別稱的時候,原有別稱所指代的內容發生變化,新別稱所指代的內容也會對應發生變化,就像量子糾纏一樣。
我不知道這樣的解釋能夠理解嗎,如還不能理解歡迎留言。我繼續思考如何講的更加淺顯易懂。
那么問題來了
如何取消這種修改值后,關聯數據變化呢???
請聽下回分解?JS如何深度復制對象和數組,避免指針變量引用修改值_你摯愛的強哥?給你發來1條消息?-CSDN博客//自定義深度復制對象or數組let copyObjOrArr = o => { let isArray = o instanceof Array; let isObject = o instanceof Object; if (!isObject) return o; let n = (isArray ? [] : {}); for (let k in o) n[k] = copyObjOrArr(o[k]); return n.https://s-z-q.blog.csdn.net/article/details/121153910
總結
以上是生活随笔為你收集整理的js中Object类型和Array类型的变量被赋值(复制)给其他变量后,修改被赋值(复制)的新变量的值,会影响原始变量的值,这是为什么呢?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 隐藏原生select下拉框的向下箭头▼
- 下一篇: JS如何深度复制对象和数组,避免指针变量