所以这会很短。
我有以下代码:
const foo = [1,2,3,4].splice(2, 1);
console.log("foo", foo);
// [3]
const bar = [1,2,3,4]
bar.splice(2, 1);
console.log("bar", bar);
// [1, 2, 4]Run Code Online (Sandbox Code Playgroud)
正如你所看到的,如果你运行它(至少在 Chrome 中) foo 控制台到一个具有单个值的数组, 3其中 bar 控制台到一个包含所有项目的三项数组,但 3。
造成这种差异的原因是什么?
splice会做两件事:
它不返回更改后的(或原始的)数组。所以
const foo = [1,2,3,4].splice(2, 1);
console.log("foo", foo);
Run Code Online (Sandbox Code Playgroud)
表现符合预期;它删除索引 2 处的项目(即3)并将其作为数组返回,因此foo计算结果为[3](包含单个删除项目的数组)。
和
const bar = [1,2,3,4]
bar.splice(2, 1);
console.log("bar", bar);
Run Code Online (Sandbox Code Playgroud)
索引 2 处的项目将从bar数组中删除,但随后您继续记录更改后的bar数组,并3删除该项目,因此结果是[1, 2, 4]。
如果您将调用结果分配splice给某个对象然后记录其他变量,可能会更清楚:
const foo = [1,2,3,4].splice(2, 1);
console.log("foo", foo);
Run Code Online (Sandbox Code Playgroud)