JavaScript中數組slice和splice的對比小結_javascript技巧

來源:互聯網
上載者:User

前言

今天重溫了一下Javascript,看到了數組的方法,其中有兩個比較相似的方法——splice和splice,看著很像,就是多了一個p,但是用法卻相當不一樣。

在使用中,可以通過選擇一個具有強語義表達性的 API 來減少混淆的發生。

1、slice

slice是指定在一個數組中的元素建立一個新的數組,即原數組不會變

數組的 slice (ECMAScript 5.1 標準 15.4.4.10 節)非常類似於字串的 slice。根據規範,slice 需要兩個參數,起點和終點。它會返回一個包含了從起點開始,到終點之前之間所有元素的新數組。

理解 slice 的功能並不是太難:

'abc'.slice(1,2)   // "b"[14, 3, 77].slice(1, 2) // [3]

需要特別注意的是它並不會修改原數組。

下面的程式碼片段描述了這個行為,x 的值沒有變,y 則是被截取的部分。

var x = [14, 3, 77];var y = x.slice(1, 2);console.log(x);   // [14, 3, 77]console.log(y);   // [3]

2、splice

splice是JS中數組功能最強大的方法,它能夠實現對數組元素的刪除、插入、替換操作,傳回值為被操作的值。

     splice刪除:color.splice(1,2) (刪除color中的1、2兩項);

     splice插入:color.splice(1,0,'brown','pink') (在color索引值為1的元素前插入兩個值);

     splice替換:color.splice(1,2,'brown','pink')  (在color中替換1、2元素);

雖然 splice(15.4.4.12 節)也需要(至少)兩個參數,但它的意義則完全不同。

[14, 3, 77].slice(1, 2)  // [3][14, 3, 77].splice(1, 2) // [3, 77]

除此之外,splice 還會改變原數組。

不要太驚訝,這正是 splice 的本意。

var x = [14, 3, 77]var y = x.splice(1, 2)console.log(x)   // [14]console.log(y)   // [3, 77]

當你編寫自己的模組時,選擇一個最不容易發生混淆的 API 非常重要。理論上,你的使用者不應該總是通過閱讀文檔來判斷他們需要哪一個。那麼我們應該遵循哪種命名規範呢?

我最熟悉的規範(與我之前在 QT 上的經驗有關)是正確地選擇動詞:現在時表示可能的修改行為,過去時則不會修改原對象,而是返回一個新的版本。如果可以的話,這兩種版本都要提供。

參考下面的例子:

var p = new Point(100, 75);p.translate(25, 25);console.log(p);  // { x: 125, y: 100 }var q = new Point(200, 100);var s = q.translated(10, 50);console.log(q);  // { x: 200, y: 100 }console.log(s);  // { x: 210, y: 150 }

注意(在二維笛卡爾座標系中)移動位置的 translate() 和僅建立一個移動過的座標的 translated() 之間的區別。調用 translate 會修改點 p 的值。然而,因為 translated() 不修改原對象,對象 q 沒有被修改,而只返回了一個新的拷貝 s。

總結

如果這個規範能夠強式一致性地部署到你的應用中,那麼上面提到的那種混淆則會被最大化地減低。以上就是這篇文章的全部內容了,希望能對大家的學習或者工作帶來一定的協助。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.