成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

JS中把對(duì)象賦值給變量時(shí)出現(xiàn)的問(wèn)題

miguel.jiang / 3375人閱讀

摘要:?jiǎn)栴}剛才碰到了一個(gè)這樣的問(wèn)題有一個(gè)由對(duì)象組成的數(shù)組,把其中一個(gè)對(duì)象賦值給變量,然后改變了的屬性,對(duì)應(yīng)的原來(lái)數(shù)組中的對(duì)象的屬性也會(huì)隨之改變。

問(wèn)題

剛才碰到了一個(gè)這樣的問(wèn)題:有一個(gè)由對(duì)象組成的數(shù)組,把其中一個(gè)對(duì)象賦值給變量p,然后改變了p的屬性,對(duì)應(yīng)的原來(lái)數(shù)組中的對(duì)象的屬性也會(huì)隨之改變。

var arr = [{x:0, y:0}, {x:0, y:0}]
var p = arr[0]
p.x = 1
p.y = 2
console.log(arr) // [{x:1, y:2}, {x:0, y:0}]
探究

我一開(kāi)始以為這是數(shù)組的什么神奇特性,經(jīng)過(guò)幾番試驗(yàn)發(fā)現(xiàn)只有由對(duì)象組成的數(shù)組有這個(gè)問(wèn)題,隱隱覺(jué)得這是對(duì)象的某個(gè)特性,然后又試了下,果然如此!

var a = {x:0, y:0}
var p = a
p.x = 1
console.log(a) // {x:1, y:0}

a賦值給變量p之后,改變p的某個(gè)屬性,a中對(duì)應(yīng)的屬性也會(huì)隨之改變。

原因

簡(jiǎn)單地想了一下原因,不知道正確不正確:
var p = a是讓p指向了a所代表的對(duì)象。同理,var a = {x:0, y:0}是讓a指向了{x:0, y:0}這樣一個(gè)對(duì)象。所以實(shí)際上pa指向的是同一個(gè)對(duì)象,修改其它們中任何一個(gè)都會(huì)使另一個(gè)一同改變。

解決辦法

那有沒(méi)有讓p改變之后a保持不變的辦法呢?
有的!

var a = {x:0, y:0}
var p = {}
p.x = a.x
p.y = a.y

通過(guò)這種方式把a的屬性一一對(duì)應(yīng)地賦值給p,之后對(duì)p做出的任何修改都不會(huì)影響到a。但是這種方法很麻煩,特別是碰到屬性很多的對(duì)象,那么可以寫個(gè)函數(shù)來(lái)完成這個(gè)工作:

function cloneObj(obj) {
  var newObj = {}
  for(var prop in obj) {
    newObj[prop] = obj[prop]
  }
  return newObj
}
var a = {x:0}
var p = cloneObj(a)
p.x = 2
console.log(p) // {x:2}
console.log(a) // {x:0}

成功了!修改p的屬性之后a的屬性沒(méi)有隨之改變。

后來(lái)網(wǎng)上查了查,發(fā)現(xiàn)js中有深拷貝和淺拷貝這樣的區(qū)分,粗粗看了一遍。但是沒(méi)有更多的實(shí)際使用經(jīng)驗(yàn)所以理解也不是很深刻,如果以后有了更深的見(jiàn)解的話到時(shí)候再來(lái)寫一篇。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/88147.html

相關(guān)文章

  • 每日 30 秒 ? 誰(shuí)敢與我一戰(zhàn)

    showImg(https://segmentfault.com/img/remote/1460000018771037?w=900&h=500); 簡(jiǎn)介 benchmark、基準(zhǔn)測(cè)試、jsPerf 在 優(yōu)雅插入數(shù)組 一文中大家最多的評(píng)論就是 能不能加個(gè)基準(zhǔn)測(cè)試。小二不是不喜歡加基準(zhǔn)測(cè)試而是現(xiàn)在硬件設(shè)備的性能越來(lái)越快了,有時(shí)候一些操作不是性能問(wèn)題的主要原因,當(dāng)然這不是我們不寫出好代碼的理由。 書寫...

    Dionysus_go 評(píng)論0 收藏0
  • 關(guān)于Keystone.js安裝時(shí)出現(xiàn)的一個(gè)新手可能會(huì)遇到的小問(wèn)題的解決方法

    摘要:在執(zhí)行如下命令之后如果你的電腦沒(méi)有裝,那么執(zhí)行就會(huì)出現(xiàn)如下的顯示不是內(nèi)部或外部命令,也不是可運(yùn)行的程序或批處理文件。是制作的生成器需要,官網(wǎng)是。使用來(lái)生成網(wǎng)站,如果沒(méi)有安裝的話,需要使用進(jìn)行安裝。解決方法安裝后即可 在terminal執(zhí)行如下命令之后 npm install -g generator-keystone 如果你的電腦沒(méi)有裝yo,那么執(zhí)行 yo keystone 就會(huì)出...

    quietin 評(píng)論0 收藏0
  • 坑爹微信之讀取PKCS12流時(shí)出現(xiàn)的java.io.IOException: DerInputStr

    摘要:背景微信退款接口需要使用到證書,我參考微信的官方進(jìn)行,部分代碼如下上面的代碼,在本地調(diào)試的時(shí)候正常跑過(guò),沒(méi)有出現(xiàn)任何異常,但是放到測(cè)試環(huán)境之后便會(huì)出現(xiàn)下面的異常,這三種異常都是從這里拋出來(lái)的。 背景 微信退款接口需要使用到證書,我參考微信的官方Demo進(jìn)行,部分代碼如下: char[] password = config.getMchID().toCharArray(); InputS...

    calx 評(píng)論0 收藏0
  • #JavaScript# IE兼容

    摘要:出現(xiàn)原因在子頁(yè)面關(guān)閉時(shí),會(huì)釋放掉在子頁(yè)面中聲明賦值的對(duì)象。所以在父頁(yè)面所有對(duì)這個(gè)對(duì)象的引用操作都會(huì)產(chǎn)生這個(gè)錯(cuò)誤。然后在父頁(yè)面中使用變成對(duì)象。 在IE瀏覽器中出現(xiàn)的問(wèn)題 1.不能執(zhí)行已釋放 Script 的代碼 1.bug出現(xiàn)背景:在使用iframe標(biāo)簽時(shí),如果子頁(yè)面向父頁(yè)面?zhèn)鬟f在子頁(yè)面創(chuàng)建的對(duì)象(所有對(duì)象,包括數(shù)組,函數(shù),正則等)時(shí),會(huì)出現(xiàn)這個(gè)bug。 2.bug出現(xiàn)原因: 在子頁(yè)面關(guān)...

    Me_Kun 評(píng)論0 收藏0
  • centos使用chrome-cli、chromium或wkhtmltoimage截圖時(shí)出現(xiàn)的中文字

    摘要:后來(lái)?yè)Q了各種系統(tǒng)環(huán)境,包括更改中文支持,依然如故,只有在自己的上是正常的。查看是否有中文字體,一般情況下是不存在的,否則也不會(huì)亂碼。再一次運(yùn)行程序腳本,查看截圖是否包含正常的中文字符。 在centos7環(huán)境下使用chrome-php或wkhtmltoimage截圖時(shí)出現(xiàn)的中文亂碼解決方案 最近做了一個(gè)小項(xiàng)目,要求使用chrome/chromium對(duì)抓取的頁(yè)面進(jìn)行截圖保存并上傳云服務(wù),因...

    ivyzhang 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<