如果在JavaScript中拼接克隆的数组,为什么原始数组会被拼接?

我有以下代码:

 var coords = [
     {lat: 39.57904, lng: -8.98094, type: "a"}, // A
     {lat: 39.55436, lng: -8.95493, type: "b"}, // B
     {lat: 39.56634, lng: -8.95836, type: "c"} // C
 ];

 var travelingOptions = [];

 getAllTravelingOptions();

 function getAllTravelingOptions(){
     coords.forEach((point, pos) => {
         let c = coords;
         delete c[pos];
         console.log(c);
         console.log(coords);
     });
 }

为什么变量c和coords总是相同?如果我在c上删除,它将反映坐标上的动作.这是正常现象吗?

解决方法:

由于分配了c,因此可以获取数组坐标的引用.

坐标的任何更改都会影响c,直到将新值分配给c.

如果使用Array.slice复制该数组,则会获得一个新数组,但具有相同的对象引用.在内部更改一个对象时,您正在使用c中相同的引用来更改相同的对象.

var coords = [
         {lat: 39.57904, lng: -8.98094, type: "a"}, // A
         {lat: 39.55436, lng: -8.95493, type: "b"}, // B
         {lat: 39.56634, lng: -8.95836, type: "c"} // C
     ],
     c = coords.slice();

console.log(c);
coords[1].type = 'foo';
console.log(c);
.as-console-wrapper { max-height: 100% !important; top: 0; }
上一篇:Netbeans PHP断点变量值“正在评估…”


下一篇:WordPress:将php数组放入JS函数