为什么我从这个简单的拼接命令获得此输出?

时间:2013-05-05 07:38:44

标签: javascript variable-assignment splice

我有一个小问题,理解为什么我得到这个输出。

var arr = ["a", "b", "c", "d", "e", "f"];
arr.splice(2,0,"1");
console.log(arr);  

var arr2 = ["a", "b", "c", "d", "e", "f"];
arr2 = arr2.splice(2,0,"2");
console.log(arr2);

输出是:

[ 'a', 'b', '1', 'c', 'd', 'e', 'f' ]
[]  

为什么第二行输出不是:

[ 'a', 'b', '2', 'c', 'd', 'e', 'f' ]  

是分配问题还是什么?

3 个答案:

答案 0 :(得分:7)

阅读splice方法。它返回

  

包含已删除元素的数组。如果只删除一个元素,则返回一个元素的数组。

通过做

arr2 = arr2.splice(2,0,"2");

你用splice返回的空数组arr覆盖初始数组[]

答案 1 :(得分:2)

1 - splice方法更改数组的内容

2 - splice方法返回删除的元素 - ** Not original Array **

答案 2 :(得分:0)

所以问题是只有部分方法返回变异后的原始对象作为返回值。即使方法设计不同,您也可以使用方法装饰器来保持对原始对象的访问。

const chainer = (target) =>
  new Proxy(target, {
    get: (_, prop, receiver) =>
        typeof target[prop] === 'function'
        ? new Proxy(target[prop], {
            apply: (f, _, args) => {
              f.apply(target, args);
              return {
                this: receiver,
                target,
              }
            },
          })
        : target[prop],
  });

const arr2 = chainer(["a", "b", "c", "d", "e", "f"])
    .splice(2,0,"1").this
    .splice(2,0,"2").target;
console.log(arr2);