主要思路是使用兼容性和稳定性都保持一致的substring方法重写/覆盖substr
/** * String.substr() bug fix * @param start * @param len * @returns */ String.prototype.substr = function(start, len) { var str = this; var l = str.length; if(start >= l) return ‘‘; if(arguments.length == 1) { if(start >= 0 && start < l) return str.substring(start); if(start < -length) return str; if(start<0 && start >= -l) return str.substring(l + start); } if(len <= 0) return ‘‘; if(start >= 0 && start < l) { if(len > l - start) len = l - start; return str.substring(start, start + len); } if(start < -l) { if(len >= l) return str; return str.substring(0, len); } if(start<0 && start >= -l) { if(len >= -start) return str.substring(l+start); return str.substring(l+start, l+start+len); } return ‘‘; };