array.slice(-1)[0] - 有人可以解释一下吗?

时间:2017-07-20 22:07:24

标签: javascript arrays slice

我从codeblocq.com获取此代码(从未听说过该网站):

alert(array.slice(-1)[0]);

它以某种方式返回array中最后一个元素的值。代码正常工作,但我不知道如何。有谁能帮我理解这个巫术?

3 个答案:

答案 0 :(得分:7)

将表达式分解为其部分。通过了解每一小块,您将了解整体。

这是您的原始陈述:alert(array.slice(-1)[0]);

alert(...)是函数调用。在它可以执行(并在屏幕上打印某些内容)之前,必须首先评估其参数。它有一个参数:array.slice(-1)[0],我们接下来会检查它。

array.slice(-1)是另一个函数调用。 [0]是一个数组索引。首先评估哪个?要回答这个问题,我们转向Operator Precedence。函数调用和成员访问都是19级,具有从左到右的关联性,这意味着我们首先评估函数调用,然后是数组索引。

为此,让我们转向documentation on array.slice,其中说:

  

arr.slice(开始)

     
    

可以使用负指数,表示距序列末尾的偏移量。 slice(-2)提取序列中的最后两个元素。

  
     

返回值

     
    

包含提取元素的新数组。

  

因此,array.slice(-1)为您提供了一个包含原始数组中最后一个元素的数组。

从左到右移动,我们现在有一个单项的数组,后跟一个数组索引[0]。这将为切片数组提供第一个(也是唯一的)项目,然后将其传递给alert(...)

答案 1 :(得分:1)

查看Array.prototype.slice()

当您致电array.slice()时,会返回您阵列的切片(作为另一个阵列)。

var array = ['zero', 'one', 'two', 'three'];
// Grab the elements from `array`
// beginning at 1 and up to (not including) 3.
var sliced = array.slice(1, 3);

console.log(array);    // ['zero', 'one', 'two', 'three']
console.log(sliced);   // ['one', 'two']
console.log(sliced[0]) // 'one'

在您的代码中,您正在执行array.slice(-1)。文档说“可以使用[a]负索引,表示从序列末尾的偏移量。切片(-2)提取序列中的最后两个元素。”因此,您的array.slice(-1)将返回一个填充了原始文件array的最后一个元素的新数组。

var array = ['zero', 'one', 'two', 'three'];
var sliced = array.slice(-1);

console.log(array);      // ['zero', 'one', 'two', 'three']
console.log(sliced);     // ['three']
console.log(sliced[0]);  // 'three'

// All together, it looks like this. 
// I'm using `alert()` instead of `console.log()` 
// to mirror your code.

alert(array.slice(-1)[0]); // 'three'

答案 2 :(得分:0)

实际上PetSerAl方法的第一个参数是浅拷贝的开始索引,如果这个索引为负,它将根据指定的索引从该数组中提取最后一个值(它表示偏离序列结束)。

所以基本上-1将返回数组的最后array.slice(-1)元素。

如果您查看e.Cancel = true; MDN参考的Array.prototype.slice(),请说:

  

可以使用负指数,表示距序列末尾的偏移量。 slice(-2)提取序列中的最后两个元素。

这解释了为什么在e.Cancel = true; Wizard.CurrentPage = PageNo 中使用{{1}}作为参数时获得最后一个值。