javascript-String.prototype.trim.call(text)和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的文档,该参数应该是字符串,因此如果用户使用错误,是否应该抛出异常(否则用户可能不会注意到问题所在)?

对Nathaniel Currier来说:方法是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“”)的字符串.

上一篇:python-如果我指定用户名,为什么我的getopts失败?


下一篇:Hive concat函数连接后结果为null