[英]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.