Q:

SP .trim() and jQuery.trim() are fighting

I'm using a jQuery plugin Datatables to create my own views of information retrieved from a list and it is mostly working. Datatables is built on top of jQuery and relies on a lot of its features.
But a couple of different options or calls from datatables throw an error in the console:
Uncaught TypeError: this.replace is not a function...(init.js)

I've traced it down to jQuery and SharePoint both trying to polyfill String.trim().
The jQuery version $.trim(value) will return a string with the white spaces at beginning and end removed. If you pass it a number it just returns the number. 
The SP version of is in init.js and this is it
String.prototype.trim = function() {
    return this.replace(/^\s\s*/, "").replace(/\s\s*$/, "")
}

The problem with this is that the jQuery implementation isn't expecting that String.prototype.trim() will have been altered and so $.trim(number) will convert to number.replace(regex) and there is no replace method on numbers.
The init.js file loads before jQuery and I really don't want to have to completely rework jQuery.
Is there anyway to prevent SharePoint from messing up $.trim()?
EDIT
So this is my really horrible hacky way of doing this that is really bad, but for the one page I need to get working today it seems to be working
Number.prototype.replace=function(){
   return this.valueof(this);
}

That puts a replace() method on numbers that just returns the value of the number. I'm sure there are soooo many reasons not to do this. If anybody has a better solution please let me know.

A:

I also asked this on Stackoverflow because it had to deal more with how Javascript deals with prototype and things like that. With the help of folks there I added this to my page:
String.prototype.trim = function(){
  if(typeof this.valueOf(this) === 'string'){
    return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');
  } else {
    return this.valueOf(this);
  }
};

$.trim = function(e){
    return String.prototype.trim.call(e);
};

Oddly I couldn't just replace the prototype or redefine $.trim(). I had to do both.

