JavaScript中slice的用途是什么-slice(-1)是什么意思?

6
下面的代码在某些时候会返回意外的输出(至少对我来说是这样).
    var arr1 = "john".split('');
    var arr2 = arr1;
    var arr3 = "jones".split('');
    arr2.push(arr3);
    console.log("array 1: length=" + arr1.length + " last=" + arr1.slice(-1));

//返回 [j,o,n,e,s]

相反地

 console.log("array 1: length=" + arr1.length + " last=" + arr1.slice(-2));

//返回 [n,j,o,n,e,s]

这个输出背后的逻辑是什么?


1
因为数组中有一个数组... - epascarello
1
push 不会生成一个 扁平化 的数组。该数组的最后一个元素是一个数组,其他元素都是字符串! - Ram
@Vohuman 最后一个元素也是字符串数组。 - Tom Cruise
1
你需要提出一个明确的问题。你想要达到什么样的结果?你试图解决的是什么整体性问题? - jfriend00
1个回答

10

你的数组是

["j", "o", "h", "n", ["j", "o", "n", "e", "s"] ]

当您删除最后一个索引时,只剩下数组。

当您删除两个索引时,您将得到数组和字母“n”。

只需对它们进行切片并查看结果:

console.log(arr1.slice(-1))  //[Array[5]]
console.log(arr1.slice(-2))  //["n", Array[5]]

你的输出看起来像是一个数组被输出了,因为当你将它连接起来时,toString() 方法被调用了。.toString() 会将数组压扁并用逗号连接索引。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接