这么问题看似很简单但是并不是很简单。可能只是针对我一个人而言吧哈哈哈哈进入正题。今天提交代码的时候发现测试用例只跑通了 66.7%。我当时在本地测试时可以的我还有点儿纳闷于是重新捋了一遍代码嗯嗯...发现是数组给数组赋值的时候出了点儿问题。错误代码(测试用例跑通了66.7%)function append(arr, item) { var newArr arr; newArr.push(item); return newArr }正确代码测试用例跑通了100%function append(arr, item) { var newArr JSON.parse(JSON.stringify(arr)) newArr.push(item); return newArr; }上面两段代码的区别就是给数组赋值的时是不一样的。1使用 来赋值的是通过浅拷贝来赋值的。2通过JSON.parse(JSON.stringify(arr)) 来赋值的 是先转换成字符串再转换成数组是通过深拷贝来完成的。下面说下数组中的【深拷贝】和【浅拷贝】的问题有错误的可以指出来奥实现数组的深拷贝有如下几种方法深拷贝完成后再次去修改原数组拷贝得到的数组值是不会变化的。浅拷贝则会跟着原数组变化。一for循环来实现数组的深拷贝。// 7.数组的深拷贝(for循环来完成) var old_arr [11, 22, 33, 44, 55, 66]; var new_arr copyArr(old_arr); function copyArr(arr) { var newArr []; for (var i 0; i arr.length; i) { newArr.push(arr[i]); } return newArr; } console.log(new_arr); //拷贝结果 [11, 22, 33, 44, 55, 66]二slice() 实现数组的深拷贝。var arr_old [111,222,333,444,555] var arr_new arr_old.slice(0); // slice(0) 从0开始选一直到结尾 // 测试:原数组改变.会影响深拷贝数组么(不会影响) arr_old[5] aaa; console.log(arr_new); // [111, 222, 333, 444, 555] console.log(arr_old); // [111, 222, 333, 444, 555, aaa]三concat() 实现数组的深拷贝。var arr [11,22,33,44,55] var arr2 arr.concat() console.log(arr2) // [11, 22, 33, 44, 55] // 测试如果改变原数组看深拷贝的数组是否会发生变化呢答案是不会发生变化的只有原数组会发生变化 arr[5] 10; // 改变原数组 console.log(arr); // 原数组被改变了 [11, 22, 33, 44, 55, 10] console.log(arr2); // 深拷贝的数组没有改变 [11, 22, 33, 44, 55]四ES6 实现数组的深拷贝。var arr3 [aa,bb,cc,dd]; var [...arr4] arr3; console.log(arr4); // 测试:原数组改变.会影响深拷贝数组么(不会影响) arr3[1] oooo; console.log(arr3); // [aa, oooo, cc, dd] console.log(arr4); // [aa, bb, cc, dd]五使用JSON.parse( JSON.stringigy( ) ) 实现数组的深拷贝。var arr5 [a,b,c,d,e]; var arr6 JSON.parse(JSON.stringify(arr5)); // 测试:原数组改变.会影响深拷贝数组么(不会影响) arr5[2] 0; console.log(arr5); // [a, b, 0, d, e] console.log(arr6); // [a, b, c, d, e]-------------大概就是这些了。