使用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  }  

 


宠辱不惊,看庭前花开花落;去留无意,望天上云卷云舒
目录
相关文章
|
3月前
|
JavaScript 前端开发
Google Earth Engine(GEE)扩展——ee-polyfill JavaScript 方法 (ES6+)
Google Earth Engine(GEE)扩展——ee-polyfill JavaScript 方法 (ES6+)
16 1
|
4月前
|
人工智能 JavaScript 前端开发
【利用AI让知识体系化】TypeScript目标:扩展JavaScript能力(二)
【利用AI让知识体系化】TypeScript目标:扩展JavaScript能力
|
4月前
|
人工智能 JavaScript 前端开发
【利用AI让知识体系化】TypeScript目标:扩展JavaScript能力(一)
【利用AI让知识体系化】TypeScript目标:扩展JavaScript能力
|
7月前
|
前端开发 JavaScript
【JavaScript原型链prototype详解】
在JavaScript中,每个对象都有一个原型(prototype)属性,它指向另一个对象。这个被指向的对象也有自己的原型,以此类推,最终形成了一个原型链。原型链的顶端是Object.prototype,它是所有对象的根原型。 当我们访问一个对象的属性时,如果该对象自身没有这个属性,JavaScript会沿着原型链向上查找,直到找到匹配的属性或者到达原型链的末端。
89 0
【JavaScript原型链prototype详解】
|
2月前
|
存储 JavaScript 前端开发
在JavaScript中,对象和数组是如何进行扩展的?
在JavaScript中,对象和数组是如何进行扩展的?
22 4
|
1天前
|
XML 前端开发 JavaScript
javascript扩展小知识(必须细节)
javascript扩展小知识(必须细节)
|
2月前
|
JavaScript
js开发:请解释什么是ES6的扩展运算符(spread operator),并给出一个示例。
ES6的扩展运算符(...)用于可迭代对象展开,如数组和对象。在数组中,它能将一个数组的元素合并到另一个数组。例如:`[1, 2, 3, 4, 5]`。在对象中,它用于复制并合并属性,如`{a: 1, b: 2, c: 3}`。
13 3
|
2月前
|
JavaScript
JS原型对象prototype
JS原型对象prototype
|
4月前
|
JavaScript 前端开发 测试技术
【利用AI让知识体系化】TypeScript目标:扩展JavaScript能力(三)
【利用AI让知识体系化】TypeScript目标:扩展JavaScript能力
|
5月前
|
JavaScript 前端开发
JavaScript基础知识:什么是原型链(Prototype Chain)?
JavaScript基础知识:什么是原型链(Prototype Chain)?
34 2