簡體   English   中英

array.slice(-1)[0] —有人可以解釋嗎?

[英]array.slice(-1)[0] — Can someone explain?

我從codeblocq.com(從未聽說過該網站)獲得以下代碼:

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

它以某種方式返回array最后一個元素的值。 該代碼按應有的方式工作,但我不知道如何。 誰能幫我理解這個法術?

將表達式分解成各個部分。 通過理解每個小片段,您將了解整體。

這是您的原始聲明: alert(array.slice(-1)[0]);

alert(...)是一個函數調用。 在它可以執行(並將某些內容打印到屏幕上)之前,必須先評估其參數。 它有一個參數: array.slice(-1)[0] ,我們接下來將討論它。

array.slice(-1)是另一個函數調用。 [0]是數組索引。 首先評估哪個? 為了回答這個問題,我們轉到“ 運算符優先級” 函數調用和成員訪問權限均為19級,具有從左到右的關聯性,這意味着我們首先評估函數調用,然后評估數組索引。

為此,我們array.slice上的文檔

arr.slice(開始)

可以使用一個負索引,指示與序列末尾的偏移量。 slice(-2)提取序列中的最后兩個元素。

返回值

包含提取的元素的新數組。

因此, array.slice(-1)為您提供了一個包含原始數組中最后一個元素的數組。

從左到右移動,我們現在有了一個包含單個項的數組,后跟一個數組索引[0] 這樣就可以從切片數組中獲得第一個(也是唯一一個)項目,然后將其傳遞給alert(...)

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]負索引,指示與序列末尾的偏移量。slice(-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'

實際上, Array.prototype.slice()方法的第一個參數是淺表副本的開始索引,如果該索引為負,它將基於指定的索引從該數組中提取最后一個值(它指示從末尾的偏移量的順序)。

因此基本上.slice(-n)將返回數組的最后n元素。

如果您查看.slice() MDN參考的Parameters部分 ,它會顯示:

可以使用一個負索引,指示與序列末尾的偏移量。 slice(-2)提取序列中的最后兩個元素。

這就解釋了為什么在使用-1作為array.slice(-1)的參數時會得到最后一個值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM