Javascript: array shift 和 reverse 方法不能在同一行代码中调用吗?

Javascript: Can array shift and reverse methods not be called in the same line of code?

javascript中的这一行:

    myarray.reverse().shift().reverse()

似乎与三个单独的行的工作方式不同

    myarray.reverse();
    myarray.shift();
    myarray.reverse();

这是预期的吗?或者这是一个错误? 我知道我可以将其替换为

    myarray.pop();

但这不是重点。我想了解预期的行为是什么。

我做了一个小 html 来演示:

<html> <body>
<button onclick="myFunction1()">Func1</button>
<button onclick="myFunction2()">Func2</button>
<p id="demo"></p>
<script>
var fruits = ["Banana", "Orange", "Apple", "Mango"];
document.getElementById("demo").innerHTML = fruits;

function myFunction1() {
    fruits.reverse();
    fruits.shift();
    fruits.reverse();
    document.getElementById("demo").innerHTML = fruits;
}

function myFunction2() {
    fruits.reverse().shift().reverse();
    document.getElementById("demo").innerHTML = fruits;
}

</script> 
</body> </html>

我希望 Func1 和 Func2 的行为相同。但是 Func2 按钮没有按预期工作,尽管 Func1 可以。

您不能像 JavaScript 中那样只是链接方法调用。后面的调用将在前一个调用的 return 值上调用,而不是在原始对象上调用。

myArray.shift() returns 是数组的(以前的)第一个元素。它不 return(原始或修改后的)数组(reverse 在就地更新后 return 数组)。

所以myArray.shift().reverse()反转第一个元素。

myArray.shift(); myArray.reverse(); 首先删除第一个元素,然后反转数组的其余部分。