js的直接賦值導致在迴圈中賦值失敗的問題

2021-08-18 16:29:21 字數 1018 閱讀 1926

寫js遇到了乙個問題,就是說我在for迴圈值通過迴圈的值給乙個物件賦值,但是的話每次賦值列印的結果都為最後一次賦的值,然後我就開始了debugger,發現我debug執行的話並沒有問題,但是如果不debug就還會出現所有的賦值都是最後乙個值得問題,這是我的**

var poster_name = this.more_temp_count['posterity_name']

var city = this.more_temp_count['city']

var blackwidow_task = this.more_temp_count['blackwidow_task']

var redis_key = blackwidow_task['redis_key']

var task_id = blackwidow_task['task_id']

var key_test = blackwidow_task['blackwidow_output']['db_config_test']['key']

var key_db = blackwidow_task['blackwidow_output']['db_config']['key']

this.loading = true

for (var x in city_list)

———-然後我以為是因為請求非同步的問題,然後把每次的值新增到乙個列表裡,在通過索引進行獲取,然而還是不對

———最後公司大佬進行解決,是因為js的拷貝問題,js的=賦值會直接把物件的記憶體位址賦值過去,所以改more_temp_count_copy這個引數就相當於改this.more_temp_count,所以才導致問題出現,解決辦法呢,就是用深拷貝,直接把物件轉為字串,然後將字串拷貝過去,這樣就不會有賦值失敗的問題了,修改一行**

// 每次迴圈重新賦值

var more_temp_count_copy = json.parse(json.stringify(this.more_temp_count))

問題解決!

js 淺拷貝直接賦值 js的賦值與淺拷貝 深拷貝

昨天翻了下陣列api,看到concat和slice方法,突然想到這個兩個方法是淺拷貝還是深拷貝,結果陷入了死胡同,為什麼mdn文件說是淺拷貝,但進行簡單的操作為什麼能複製成功啊,糾結半天後才弄清原由,原來我一直把賦值和深淺拷貝搞混了。首先不要把引用型別的賦值歸結為淺拷貝,深拷貝和淺拷貝只針對像 ob...

js 迴圈中的非同步

for var i 0 i 5 i 0 1 2 3 4 加入延時 for var i 0 i 5 i 1000 i 5 立即執行 5 一秒後 5 一秒後 5 一秒後 5 一秒後var output function i 1000 i for var i 0 i 5 i 0 立即執行 1 一秒後 2 ...

js的結構賦值

var foo one two three var one,two,three foo console.log one one console.log two two console.log three three var a,b a,b 1,2 console.log a 1 console.lo...