繁体   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