2009-11-09 30 views
5

Tôi sắp tạo ra một chức năng cắt trong javascript, nhưng vì tôi không muốn phát minh lại bánh xe tôi googled cho phương pháp này.
Tôi thấy liên kết này http://www.somacon.com/p355.phpTôi có nên sửa đổi nguyên mẫu của chuỗi không?

Giải pháp nó cung cấp là:

String.prototype.trim = function() { 
    return this.replace(/^\s+|\s+$/g,""); 
} 
String.prototype.ltrim = function() { 
    return this.replace(/^\s+/,""); 
} 
String.prototype.rtrim = function() { 
    return this.replace(/\s+$/,""); 
} 

cũng nó nói nếu bạn don'y WNT để thay đổi nguyên mẫu của chuỗi sau đó sử dụng này:

function trim(stringToTrim) { 
    return stringToTrim.replace(/^\s+|\s+$/g,""); 
} 
function ltrim(stringToTrim) { 
    return stringToTrim.replace(/^\s+/,""); 
} 
function rtrim(stringToTrim) { 
    return stringToTrim.replace(/\s+$/,""); 
} 

Tôi muốn biết trong trường hợp nào cần không sửa đổi nguyên mẫu của Chuỗi hoặc nói bất kỳ đối tượng nào.

Trả lời

7

Các trim chức năng phải được tiêu chuẩn hóa trong ECMAScript Fifth Edition, cũng như đã có mặt trong một số trình duyệt . Vì vậy:

  1. Có, thêm chúng vào nguyên mẫu là hoàn toàn thích hợp, nhưng

  2. Bạn không nên thêm chúng vào nguyên mẫu nếu họ đã có, như bạn sẽ chỉ được thay thế một chức năng mã nguồn gốc nhanh với JavaScript chậm.

Người ta cũng thường nhẹ nhanh hơn để làm trang trí như hai thay thế:

// Add ECMA262-5 string trim if not supported natively 
// 
if (!('trim' in String.prototype)) { 
    String.prototype.trim= function() { 
     return this.replace(/^\s+/, '').replace(/\s+$/, ''); 
    }; 
} 
+1

+1 cho 'if (! ('Trim' trong String.prototype)) {' –

+0

Có gì sai nếu (! String.prototype.trim)? Có vẻ hiệu quả hơn với tôi. – KooiInc

+3

'in' là rõ ràng hơn về những gì nó đang thử nghiệm, không dựa vào tính trung thực của một thuộc tính hoặc kỳ quặc JavaScript kỳ lạ và khủng khiếp của retuning một' undefined' mới cho cái gì mà bất kỳ ngôn ngữ khác sẽ xem xét một ngoại lệ. Đối với trường hợp đặc biệt này tất nhiên nó không quan trọng chút nào, nhưng nói chung tôi luôn sử dụng 'in' để kiểm tra nếu một đối tượng có thuộc tính. – bobince

1

Đối với loại chức năng tiện ích rất hữu ích này, tôi muốn nói rằng bạn có thể sửa đổi mẫu thử nghiệm. Nhưng bạn nên biết rằng các chức năng có thể đã tồn tại tự nhiên trong một vài trình duyệt, vì vậy bạn nên kiểm tra xem nó: https://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Objects/String

+0

và trong trường hợp này bạn không nên, nó là liên quan đến somekind của chi phí hoặc những gì? –

+0

không có trường hợp "bạn không nên", chỉ cần biết những gì Fabien nói. –

+0

javascript tuyệt vời 1.8.1 có phương thức string.trim() https://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Global_Objects/String/Trim –

2

Nói chung - không sửa đổi một nguyên mẫu của các đối tượng buildin. Nhưng ofcourse bạn có thể thêm chức năng tiện dụng của bạn.

Và luôn luôn kiểm tra trước khi bạn thêm:

//pre-1.6 javascript 
if (!Array.prototype.indexOf) { 
    Array.prototype.indexOf = function(elt) { 
     var len = this.length >>> 0; 
     var from = Number(arguments[1]) || 0; 
     from = (from < 0) ? Math.ceil(from) : Math.floor(from); 
     if (from < 0) 
      from += len; 
     for (; from < len; from++) { 
      if (from in this && this[from] === elt) 
       return from; 
     } 
     return -1; 
    }; 
} 

Bằng cách này bạn không ghi đè lên mush nhanh buildin chức năng có thể trở thành có sẵn đôi khi ...

Các vấn đề liên quan