簡體   English   中英

String.prototype.trim.call(text)和text.trim()之間的區別

[英]difference between String.prototype.trim.call(text) and text.trim()

看看jQuery的來源:

// Use native String.trim function wherever possible
trim: trim && !trim.call("\uFEFF\xA0") ?
    function( text ) {
        return text == null ?
            "" :
            trim.call( text );
    } :

    // Otherwise use our own trimming functionality
    function( text ) {
        return text == null ?
            "" :
            ( text + "" ).replace( rtrim, "" );
    },

有什么理由為什么他們使用trim.call(text)而不是text.trim()? 非常感謝!!

更新:

這樣,如果參數不是字符串,它將不會拋出異常。 但根據jQuery的doc,該參數應該是一個字符串,所以如果用戶使用它錯了,它應該拋出異常(否則用戶可能不會注意到什么是錯的)?

而Nathaniel Currier:mothod是jQuery.trim()而不是jQuery.fn.trim()所以它沒有鏈接。

我不確定這是他們的設計原理,但使用call()將使用非字符串的對象:

var a = [1, 2, 3];
var b = String.prototype.trim.call(a); // same result as b = '1,2,3'
var c = a.trim(); // => generates TypeError

請注意,他們的polyfill將text強制轉換為帶有( text + "" )的字符串。

String.trim()並非在所有(較舊的)瀏覽器中都可用,因此如果不可用,它們將使用本機(如果更快)或者它們自己的實現,如果不是......

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/Trim

還可以看到這個有關Function.prototype.call()行為的信息https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call

text不是字符串時, text.trim()將拋出錯誤( TypeError: .... has no method 'trim' ),而String.prototype.trim.call(text)則不會。

暫無
暫無

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

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