查看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“”)的字符串.