使用JS有一個很惱人的問題,當我把對象賦值給新的對象后,新的對象改變了,舊的對象也會跟著改變,如以下例子:
// 被引用的對象
var oldModel = {
name: "oldModel",
value: 123
}
// 新的對象從舊的對象賦值
var newModel = oldModel
// 只改變新對象的值
newModel.name = "newModel"
console.log("打印oldModel")
console.log(oldModel)
console.log("-------------")
console.log("打印newModel")
console.log(newModel)
image.png
按照我們預期的結果,打印的oldModel的name應該還是oldModel才對。
出現這問題,主要是因為在JS里面使用的是地址引用,所以無論你修改的是新對象還是舊對象,實際上操作的都是同一個對象。
解決方法:
我們在給對象賦值的時候,改成 var newModel = $.extend(true,{},oldModel) 就可以了
// 被引用的對象
var oldModel = {
name: "oldModel",
value: 123
}
// 新的對象從舊的對象賦值
var newModel = $.extend(true,{},oldModel)
// 只改變新對象的值
newModel.name = "newModel"
console.log("打印oldModel")
console.log(oldModel)
console.log("-------------")
console.log("打印newModel")
console.log(newModel)
image.png
現在再看效果,改變新對象,舊對象不會再跟著改變了。
惱人的問題終于解決了!