使用prototype扩展的JavaScript常用函数库

简介:   1 /**    2 * 检索数组元素(原型扩展或重载)    3 * @param {o} 被检索的元素值    4 * @type int    5 * @returns 元素索引    6 */     7 Array.
  1  /* *  
  2  * 检索数组元素(原型扩展或重载)  
  3  * @param {o} 被检索的元素值  
  4  * @type int  
  5  * @returns 元素索引  
  6  */    
  7  Array.prototype.contains  =   function (o) {   
  8     var  index  =   - 1 ;   
  9     for ( var  i = 0 ;i < this .length;i ++ ){ if ( this [i] == o){index  =  i; break ;}}   
 10     return  index;   
 11  }   
 12    
 13  /* *  
 14  * 日期格式化(原型扩展或重载)  
 15  * 格式 YYYY/yyyy/YY/yy 表示年份  
 16  * MM/M 月份  
 17  * W/w 星期  
 18  * dd/DD/d/D 日期  
 19  * hh/HH/h/H 时间  
 20  * mm/m 分钟  
 21  * ss/SS/s/S 秒  
 22  * @param {formatStr} 格式模版  
 23  * @type string  
 24  * @returns 日期字符串  
 25  */    
 26  Date.prototype.format  =   function (formatStr){   
 27       var  str  =  formatStr;   
 28       var  Week  =  [ ' ' , ' ' , ' ' , ' ' , ' ' , ' ' , ' ' ];   
 29      str = str.replace( / yyyy|YYYY / , this .getFullYear());   
 30      str = str.replace( / yy|YY / ,( this .getYear()  %   100 ) > 9 ? ( this .getYear()  %   100 ).toString(): ' 0 '   +  ( this .getYear()  %   100 ));   
 31      str = str.replace( / MM / ,( this .getMonth() + 1 ) > 9 ? ( this .getMonth() + 1 ).toString(): ' 0 '   +  ( this .getMonth() + 1 ));   
 32      str = str.replace( / M / g, this .getMonth());   
 33      str = str.replace( / w|W / g,Week[ this .getDay()]);   
 34      str = str.replace( / dd|DD / , this .getDate() > 9 ? this .getDate().toString(): ' 0 '   +   this .getDate());   
 35      str = str.replace( / d|D / g, this .getDate());   
 36      str = str.replace( / hh|HH / , this .getHours() > 9 ? this .getHours().toString(): ' 0 '   +   this .getHours());   
 37      str = str.replace( / h|H / g, this .getHours());   
 38      str = str.replace( / mm / , this .getMinutes() > 9 ? this .getMinutes().toString(): ' 0 '   +   this .getMinutes());   
 39      str = str.replace( / m / g, this .getMinutes());   
 40      str = str.replace( / ss|SS / , this .getSeconds() > 9 ? this .getSeconds().toString(): ' 0 '   +   this .getSeconds());   
 41      str = str.replace( / s|S / g, this .getSeconds());   
 42       return  str;   
 43  }   
 44    
 45  /* *  
 46  * 比较日期差(原型扩展或重载)  
 47  * @param {strInterval} 日期类型:'y、m、d、h、n、s、w'  
 48  * @param {dtEnd} 格式为日期型或者 有效日期格式字符串  
 49  * @type int  
 50  * @returns 比较结果  
 51  */    
 52  Date.prototype.dateDiff  =   function (strInterval, dtEnd) {   
 53       var  dtStart  =   this ;   
 54       if  ( typeof  dtEnd  ==   ' string '  ) {  // 如果是字符串转换为日期型   
 55          dtEnd  =  StringToDate(dtEnd);   
 56      }   
 57       switch  (strInterval) {   
 58           case   ' s '  : return  parseInt((dtEnd  -  dtStart)  /   1000 );   
 59           case   ' n '  : return  parseInt((dtEnd  -  dtStart)  /   60000 );   
 60           case   ' h '  : return  parseInt((dtEnd  -  dtStart)  /   3600000 );   
 61           case   ' d '  : return  parseInt((dtEnd  -  dtStart)  /   86400000 );   
 62           case   ' w '  : return  parseInt((dtEnd  -  dtStart)  /  ( 86400000   *   7 ));   
 63           case   ' m '  : return  (dtEnd.getMonth() + 1 ) + ((dtEnd.getFullYear() - dtStart.getFullYear()) * 12 -  (dtStart.getMonth() + 1 );   
 64           case   ' y '  : return  dtEnd.getFullYear()  -  dtStart.getFullYear();   
 65      }   
 66  }   
 67    
 68  /* *  
 69  * 日期计算(原型扩展或重载)  
 70  * @param {strInterval} 日期类型:'y、m、d、h、n、s、w'  
 71  * @param {Number} 数量  
 72  * @type Date  
 73  * @returns 计算后的日期  
 74  */    
 75  Date.prototype.dateAdd  =   function (strInterval, Number) {   
 76       var  dtTmp  =   this ;   
 77       switch  (strInterval) {   
 78           case   ' s '  : return   new  Date(Date.parse(dtTmp)  +  ( 1000   *  Number));   
 79           case   ' n '  : return   new  Date(Date.parse(dtTmp)  +  ( 60000   *  Number));   
 80           case   ' h '  : return   new  Date(Date.parse(dtTmp)  +  ( 3600000   *  Number));   
 81           case   ' d '  : return   new  Date(Date.parse(dtTmp)  +  ( 86400000   *  Number));   
 82           case   ' w '  : return   new  Date(Date.parse(dtTmp)  +  (( 86400000   *   7 *  Number));   
 83           case   ' q '  : return   new  Date(dtTmp.getFullYear(), (dtTmp.getMonth())  +  Number * 3 , dtTmp.getDate(), dtTmp.getHours(), dtTmp.getMinutes(), dtTmp.getSeconds());   
 84           case   ' m '  : return   new  Date(dtTmp.getFullYear(), (dtTmp.getMonth())  +  Number, dtTmp.getDate(), dtTmp.getHours(), dtTmp.getMinutes(), dtTmp.getSeconds());   
 85           case   ' y '  : return   new  Date((dtTmp.getFullYear()  +  Number), dtTmp.getMonth(), dtTmp.getDate(), dtTmp.getHours(), dtTmp.getMinutes(), dtTmp.getSeconds());   
 86      }   
 87  }   
 88    
 89  /* *  
 90  * 取得日期数据信息(原型扩展或重载)  
 91  * @param {interval} 日期类型:'y、m、d、h、n、s、w'  
 92  * @type int  
 93  * @returns 指定的日期部分  
 94  */    
 95  Date.prototype.datePart  =   function (interval){   
 96       var  myDate  =   this ;   
 97       var  partStr = '' ;   
 98       var  Week  =  [ ' ' , ' ' , ' ' , ' ' , ' ' , ' ' , ' ' ];   
 99       switch  (interval)   
100      {   
101           case   ' y '  :partStr  =  myDate.getFullYear(); break ;   
102           case   ' m '  :partStr  =  myDate.getMonth() + 1 ; break ;   
103           case   ' d '  :partStr  =  myDate.getDate(); break ;   
104           case   ' w '  :partStr  =  Week[myDate.getDay()]; break ;   
105           case   ' ww '  :partStr  =  myDate.WeekNumOfYear(); break ;   
106           case   ' h '  :partStr  =  myDate.getHours(); break ;   
107           case   ' n '  :partStr  =  myDate.getMinutes(); break ;   
108           case   ' s '  :partStr  =  myDate.getSeconds(); break ;   
109      }   
110       return  partStr;   
111  }   
112    
113  /* *  
114  * 把日期分割成数组(原型扩展或重载)  
115  * @type array  
116  * @returns 日期数组  
117  */    
118  Date.prototype.toArray  =   function () {   
119       var  myDate  =   this ;   
120       var  myArray  =  Array();   
121      myArray[ 0 =  myDate.getFullYear();   
122      myArray[ 1 =  myDate.getMonth() + 1 ;   
123      myArray[ 2 =  myDate.getDate();   
124      myArray[ 3 =  myDate.getHours();   
125      myArray[ 4 =  myDate.getMinutes();   
126      myArray[ 5 =  myDate.getSeconds();   
127       return  myArray;   
128  }   
129    
130  /* *  
131  * 取得当前月份的天数(原型扩展或重载)  
132  * @type int  
133  * @returns 天数  
134  */    
135  Date.prototype.daysOfMonth  =   function (){   
136       var  myDate  =   this ;   
137       var  ary  =  myDate.toArray();   
138       var  date1  =  ( new  Date(ary[ 0 ],ary[ 1 ] + 1 , 1 ));   
139       var  date2  =  date1.dateAdd( ' m ' , 1 );   
140       var  result  =  daysDiff(date1.format( ' yyyy-MM-dd ' ),date2.format( ' yyyy-MM-dd ' ));   
141       return  result;   
142  }   
143    
144  /* *  
145  * 判断闰年(原型扩展或重载)  
146  * @type boolean  
147  * @returns 是否为闰年 true/false  
148  */    
149  Date.prototype.isLeapYear  =   function () {   
150     return  ( 0 == this .getYear() % 4 && (( this .getYear() % 100 != 0 ) || ( this .getYear() % 400 == 0 )));   
151  }   
152    
153  /* *  
154  * 比较两个日期的天数差(自定义)  
155  * @param {DateOne} 日期一  
156  * @param {DateOne} 日期二  
157  * @type int  
158  * @returns 比较结果  
159  */    
160  function  daysDiff(DateOne,DateTwo)   
161  {   
162       var  OneMonth  =  DateOne.substring( 5 ,DateOne.lastIndexOf ( ' - ' ));   
163       var  OneDay  =  DateOne.substring(DateOne.length,DateOne.lastIndexOf ( ' - ' ) + 1 );   
164       var  OneYear  =  DateOne.substring( 0 ,DateOne.indexOf ( ' - ' ));   
165    
166       var  TwoMonth  =  DateTwo.substring( 5 ,DateTwo.lastIndexOf ( ' - ' ));   
167       var  TwoDay  =  DateTwo.substring(DateTwo.length,DateTwo.lastIndexOf ( ' - ' ) + 1 );   
168       var  TwoYear  =  DateTwo.substring( 0 ,DateTwo.indexOf ( ' - ' ));   
169    
170       var  cha = ((Date.parse(OneMonth + ' / ' + OneDay + ' / ' + OneYear) -  Date.parse(TwoMonth + ' / ' + TwoDay + ' / ' + TwoYear)) / 86400000);   
171       return  Math.abs(cha);   
172  }   
173    
174  /* *  
175  * 日期计算(自定义)  
176  * @param {strInterval} 日期类型:'y、m、d、h、n、s、w'  
177  * @param {Number} 数量  
178  * @param {prmDate} 原日期  
179  * @type Date  
180  * @returns 计算后的日期  
181  */    
182  function  dateAdd(interval,number,prmDate){   
183    number  =  parseInt(number);   
184     if  ( typeof (prmDate) == " string " ){   
185      prmDate  =  prmDate.split( / \D / );   
186       -- prmDate[ 1 ];   
187      eval( " var prmDate = new Date( " + prmDate.join( " , " ) + " ) " );   
188    }   
189     if  ( typeof (prmDate) == " object " ){   
190       var  prmDate  =  prmDate   
191    }   
192     switch (interval){   
193       case   " y " : prmDate.setFullYear(prmDate.getFullYear() + number);  break ;   
194       case   " m " : prmDate.setMonth(prmDate.getMonth() + number);  break ;   
195       case   " d " : prmDate.setDate(prmDate.getDate() + number);  break ;   
196       case   " w " : prmDate.setDate(prmDate.getDate() + 7 * number);  break ;   
197       case   " h " : prmDate.setHours(prmDate.getHour() + number);  break ;   
198       case   " n " : prmDate.setMinutes(prmDate.getMinutes() + number);  break ;   
199       case   " s " : prmDate.setSeconds(prmDate.getSeconds() + number);  break ;   
200       case   " l " : prmDate.setMilliseconds(prmDate.getMilliseconds() + number);  break ;   
201    }   
202     return  prmDate;   
203  }   
204    
205  /* *  
206  * 获取字符串长度(原型扩展或重载)  
207  * @type int  
208  * @returns 字符串长度  
209  */    
210  String.prototype.len  =   function () {   
211     var  arr = this .match( / [^\x00-\xff] / ig);   
212     return   this .length + (arr == null ? 0 :arr.length);   
213  }   
214    
215  /* *  
216  * 字符串左取指定个数的字符(原型扩展或重载)  
217  * @param {num} 获取个数  
218  * @type string  
219  * @returns 匹配的字符串  
220  */    
221  String.prototype.left  =   function (num,mode) {   
222     if ( ! / \d+ / .test(num))  return ( this );   
223     var  str  =   this .substr( 0 ,num);   
224     if ( ! mode)  return  str;   
225     var  n  =  str.len()  -  str.length;   
226    num  =  num  -  parseInt(n / 2);   
227     return   this .substr( 0 ,num);   
228  }   
229    
230  /* *  
231  * 字符串右取指定个数的字符(原型扩展或重载)  
232  * @param {num} 获取个数  
233  * @type string  
234  * @returns 匹配的字符串  
235  */    
236  String.prototype.right  =   function (num,mode) {   
237     if ( ! / \d+ / .test(num))  return ( this );   
238     var  str  =   this .substr( this .length - num);   
239     if ( ! mode)  return  str;   
240     var  n  =  str.len()  -  str.length;   
241    num  =  num  -  parseInt(n / 2);   
242     return   this .substr( this .length - num);   
243  }   
244    
245  /* *  
246  * 字符串包含(原型扩展或重载)  
247  * @param {string: str} 要搜索的子字符串  
248  * @param {bool: mode} 是否忽略大小写  
249  * @type int  
250  * @returns 匹配的个数  
251  */    
252  String.prototype.matchCount  =   function (str,mode) {   
253     return  eval( " this.match(/( " + str + " )/g " + (mode ? " i " : "" ) + " ).length " );   
254  }   
255    
256  /* *  
257  * 去除左右空格(原型扩展或重载)  
258  * @type string  
259  * @returns 处理后的字符串  
260  */    
261  String.prototype.trim  =   function () {   
262     return   this .replace( / (^\s*)|(\s*$) / g, "" );   
263  }   
264    
265  /* *  
266  * 去除左空格(原型扩展或重载)  
267  * @type string  
268  * @returns 处理后的字符串  
269  */    
270  String.prototype.lTrim  =   function () {   
271     return   this .replace( / (^\s*) / g,  "" );   
272  }   
273    
274  /* *  
275  * 去除右空格(原型扩展或重载)  
276  * @type string  
277  * @returns 处理后的字符串  
278  */    
279  String.prototype.rTrim  =   function () {   
280     return   this .replace( / (\s*$) / g,  "" );   
281  }   
282    
283  /* *  
284  * 字符串转换为日期型(原型扩展或重载)  
285  * @type Date  
286  * @returns 日期  
287  */    
288  String.prototype.toDate  =   function () {    
289     var  converted  =  Date.parse( this );     
290     var  myDate  =   new  Date(converted);    
291     if  (isNaN(myDate)) { var  arys =   this .split( ' - ' ); myDate  =   new  Date(arys[ 0 ], -- arys[ 1 ],arys[ 2 ]); }    
292     return  myDate;   
293  }  

 


宠辱不惊,看庭前花开花落;去留无意,望天上云卷云舒
目录
相关文章
|
20天前
|
JavaScript 前端开发 Java
[JS]同事:这次就算了,下班回去赶紧补补内置函数,再犯肯定被主管骂
本文介绍了JavaScript中常用的函数和方法,包括通用函数、Global对象函数以及数组相关函数。详细列出了每个函数的参数、返回值及使用说明,并提供了示例代码。文章强调了函数的学习应结合源码和实践,适合JavaScript初学者和进阶开发者参考。
34 2
[JS]同事:这次就算了,下班回去赶紧补补内置函数,再犯肯定被主管骂
|
19天前
|
前端开发 JavaScript 开发者
除了 Generator 函数,还有哪些 JavaScript 异步编程解决方案?
【10月更文挑战第30天】开发者可以根据具体的项目情况选择合适的方式来处理异步操作,以实现高效、可读和易于维护的代码。
|
20天前
|
JavaScript 前端开发 搜索推荐
Moment.js、Day.js、Miment,日期时间库怎么选?
【10月更文挑战第29天】如果你需要一个功能强大、插件丰富的日期时间库,并且对性能要求不是特别苛刻,Moment.js是一个不错的选择;如果你追求极致的轻量级和高性能,那么Day.js可能更适合你;而如果你有一些特定的日期时间处理需求,并且希望在性能和功能之间取得平衡,Miment也是可以考虑的。
|
25天前
|
存储 JavaScript 前端开发
decimal.js库的安装和使用方法
【10月更文挑战第24天】decimal.js 是一个非常实用的高精度计算库,通过合理的安装和使用,可以在 JavaScript 中实现精确的数值计算和处理。你可以根据具体的需求和项目情况,灵活运用该库来解决数字精度丢失的问题。
|
1月前
|
JavaScript 前端开发
JavaScript 函数语法
JavaScript 函数是使用 `function` 关键词定义的代码块,可在调用时执行特定任务。函数可以无参或带参,参数用于传递值并在函数内部使用。函数调用可在事件触发时进行,如用户点击按钮。JavaScript 对大小写敏感,函数名和关键词必须严格匹配。示例中展示了如何通过不同参数调用函数以生成不同的输出。
|
1月前
|
存储 JavaScript 前端开发
JS函数提升 变量提升
【10月更文挑战第6天】函数提升和变量提升是 JavaScript 语言的重要特性,但它们也可能带来一些困惑和潜在的问题。通过深入理解和掌握它们的原理和表现,开发者可以更好地编写和维护 JavaScript 代码,避免因不了解这些机制而导致的错误和不一致。同时,不断提高对执行上下文等相关概念的认识,将有助于提升对 JavaScript 语言的整体理解和运用能力。
|
1月前
|
JavaScript 前端开发 开发者
jQuery:JavaScript库的瑰宝
jQuery:JavaScript库的瑰宝
43 3
|
1月前
|
JavaScript 前端开发
js教程——函数
js教程——函数
37 4
|
1月前
|
存储 JavaScript 前端开发
js中函数、方法、对象的区别
js中函数、方法、对象的区别
18 2
|
1月前
|
JavaScript 前端开发
Node.js 函数
10月更文挑战第5天
24 3