![](/img/trans.png)
[英]Can I be sure that array.slice() will always work the same as array.slice(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.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.