2010-09-19 20 views
653

sự khác biệt giữaSự khác biệt giữa chất nền và chuỗi con là gì?

alert("abc".substr(0,2)); 

alert("abc".substring(0,2)); 

Cả hai dường như đầu ra “ab” là gì.

+17

Có [không có lý do gì] (http://www.bennadel.com/blog/2159-Using-Slice-Substring-And-Substr-In-Javascript.htm) để sử dụng 'chuỗi con' tại thời điểm này. Sử dụng 'slice' để thay thế. –

+10

@Derek 朕 會 功夫 Lưu ý, 'chuỗi con' [vượt trội hơn tất cả những người khác trên Chrome] (http://jsperf.com/slice-vs-substr-vs-substring-methods-long-string/22) tính đến cuối năm. –

+2

Thêm vào nhận xét @Derek ... Không giống như phương thức 'slice',' chuỗi con' không xử lý điều chỉnh cho các tham số phủ định. –

Trả lời

707

Sự khác biệt nằm trong đối số thứ hai. Đối số thứ hai là substring là chỉ mục dừng tại (nhưng không bao gồm), nhưng đối số thứ hai là substr là độ dài tối đa để trả về.

Liên kết?

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/substr

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/substring

+48

Âm thanh như một nguồn lỗi phổ biến. Tốt để biết sự khác biệt. Tìm thấy nhận xét bổ sung về điều này tại đây: http://rapd.wordpress.com/2007/07/12/javascript-substr-vs-substring/ – schnaader

+25

Vì vậy, khi bắt đầu từ 0, bạn có thể sử dụng một trong hai phương pháp. – Pawel

+6

cái nào hiệu quả hơn? – eagor

230

substr (MDN) có các thông số như (from, length).
substring (MDN) lấy tham số là (from, to).

alert("abc".substr(1,2)); // returns "bc" 
alert("abc".substring(1,2)); // returns "b" 

Bạn có thể nhớ substring mất chỉ số, cũng như chưa một phương pháp khai thác chuỗi, slice.

Khi bắt đầu từ 0, bạn có thể sử dụng một trong hai phương pháp.

+86

'.substring()' có chỉ mục. Bạn có thể nhớ vì nó là người duy nhất có chữ 'i' trong tên. '.slice()' cũng nhận các chỉ mục. – colllin

+6

@colllin, nhận xét về tôi và các chỉ dẫn chắc chắn sẽ được chuyển vào câu trả lời! – MyDaftQuestions

20

Một hình ảnh xác thực khác mà tôi vừa mới xem là trong IE 8, "abcd".substr(-1) trả về sai "abcd", trong khi Firefox 3.6 trả lại "d" như nó phải. slice hoạt động chính xác trên cả hai.

Tìm hiểu thêm về chủ đề này có thể được tìm thấy here.

4

Slice vs Substr vs Substring vs [ ] Methods

Có lợi ích hiệu suất cho từng phương pháp javascript này. Vui lòng sử dụng các chức năng này cho phù hợp.

+6

Câu trả lời này sẽ tốt hơn nếu nó bao gồm một số văn bản tóm tắt ở đây về những phát hiện của lợi ích hiệu suất được liên kết, xin vui lòng. – jtheletter

20

Như ám chỉ trong câu trả lời của yatima2975, có một sự khác biệt thêm:

substr() chấp nhận một vị trí bắt đầu tiêu cực như một bù đắp từ ngày kết thúc của chuỗi. substring() thì không.

Từ MDN:

Nếu bắt đầu là tiêu cực, substr() sử dụng nó như là một chỉ số nhân vật từ cuối chuỗi.

Vì vậy, để tổng hợp những khác biệt chức năng:

substring(begin-offset, end-offset-exclusive) nơi bắt đầu-offset là 0 hoặc cao hơn

substr(begin-offset, length) nơi bắt đầu-bù đắp cũng có thể tiêu cực

6

Sự khác biệt là tham số thứ hai.thông số thứ hai của họ, trong khi cả hai con số, đang mong đợi hai điều khác nhau:

Khi sử dụng substring tham số thứ hai là chỉ số đầu tiên không bao gồm:

var s = "string"; 
s.substring(1, 3); // would return 'tr' 

var s = "another example"; 
s.substring(3, 7); // would return 'ther' 

Khi sử dụng substr tham số thứ hai là số ký tự đưa vào chuỗi:

var s = "string"; 
s.substr(1, 3); // would return 'tri' 

var s = "another example"; 
s.substr(3, 7); // would return 'ther ex' 
+1

số như vậy rất leet wow –

-4

sự khác biệt lớn là, substr()một phương pháp phản mà vẫn có thể được sử dụng, nhưng nên được sử dụng một cách thận trọng bec sử dụng chúng sẽ được loại bỏ hoàn toàn trong tương lai. Bạn nên làm việc để loại bỏ việc sử dụng chúng khỏi mã của bạn. Và phương pháp substring() đã thành công và chỉ định phương thức cũ.

+1

Bạn có thể trỏ đến một nguồn đáng tin cậy cho biết sự phản đối của 'substr()'? Tôi đã đọc nó từ nhiều người, nhưng tôi không thể tìm thấy bất kỳ thông tin nào trên trang web hỗ trợ tuyên bố. Ngoài ra, Mozilla không đưa nó vào danh sách các tính năng không được sử dụng/lỗi thời: https: //developer.mozilla.org/en-US/docs/Web/JavaScript/Tham chiếu/Deprecated_and_obsolete_features – DanielM

+0

@DanielM Theo tôi nhớ, nó không được chấp nhận khi tôi đăng câu trả lời này, có thể bài viết đã thay đổi và hiện không được dùng nữa * (nhưng không chắc chắn) *. Nhưng vẫn ghi lại trên một số bài viết như trong http://sstut.com/javascript/substring-method.php như không được chấp nhận. – 5ervant

4

Sự khác biệt chính là

substr() cho phép bạn chỉ định độ dài tối đa để trở

substring() cho phép bạn xác định các chỉ số và đối số thứ hai là không bao gồm

Có là một số sự tinh tế bổ sung giữa substr() và substring() chẳng hạn như việc xử lý các đối số bằng nhau và đối số phủ định. Cũng lưu ý substring() và slice() tương tự nhưng không phải lúc nào cũng giống nhau.

length vs indices 
    "string".substr(2,4);  // "ring" (start, length) length is the maximum length to return 
    "string".substring(2,4); // "ri" (start, end) indices/second value is NOT inclusive 
    "string".slice(2,4);  // "ri" (start, end) indices/second value is NOT inclusive 

    watch out for substring swap 
    "string".substr(3,2);  // "in" 
    "string".substring(3,2); // "r" (swaps the larger and the smaller number) 
    "string".slice(3,2);  // ""  (just returns "") 

    handling negative arguments 
    "string".substr(2,-4); // "" 
    "string".substring(2,-4); // "st" (converts negative numbers to 0, then swaps first and second position) 
    "string".slice(2,-4);  // "" 
Các vấn đề liên quan