丰富自己的javascript类库

2024-05-15 14:58
文章标签 java script 类库 丰富

本文主要是介绍丰富自己的javascript类库,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

丰富自己的javascript类库

每个优秀的开发者都会形成自己的类库,作为一个java开发者,我们也会写一大堆的工具类,用于简化我们的开发工作。但是作为一个全站攻城狮,不仅仅只是懂的形成java的类库,javascript的类库也同样重要。好啦,这篇文章不多说废话,下面对的代码提供了一些非常方便的工具类,或者是对javascript已有对象的扩展,比如字符串的扩展,日期对象的扩展,数组的扩展等。同样的,也提供了一个StringBuffer对象,该对象的用法基本也与java.lang.StringBuffer一样...
/*** 该文件包含了一些模拟java常用类的相关javascript类* 这里面主要包含了java.lang,java.util包中一些常用的类* * 为了更加容易操作字符串,这里面也对字符串进行了赠强* 对数组,日期也进行了增强* * 比如:StringBuffer,List,Map,Set等* @author:luohong* @date:2015-10-21 13:40 pm* @email 846705189@qq.com*/
//========================================实现一个StringBuffer====================================//
/*** 模拟StringBuffer* 使用过程基本上和java.lang.StringBuffer一样,但是在toString中可以插入风格符,默认分隔符为','* */
function StringBuffer(){this.strs = [];  //用数组来缓存所有的内容if(typeof StringBuffer._initialized == "undefined"){StringBuffer._initalized = true;  //已经初始化过了,不需要重复初始化StringBuffer.prototype.append = function(str){this.strs.push(str);return this;};StringBuffer.prototype.toString = function(seperator){if(!seperator){seperator = "";}return this.strs.join(seperator);};}
}
//========================================实现一个StringBuffer====================================////====================================增强字符串=============================================//
/*** 判断字符串是否为空。* * @returns {Boolean}*/
String.prototype.isEmpty = function() {return (this == null || this == undefined || this == '');
};/*** 功能:移除首尾空格*/
String.prototype.trim = function() {return this.replace(/(^[ \t\n\r]+)|([ \t\n\r]+$)/g, '');
};/*** 功能:移除左边空格*/
String.prototype.lTrim = function() {return this.replace(/(^\s*)/g, "");
};/*** 功能:移除右边空格*/
String.prototype.rTrim = function() {return this.replace(/(\s*$)/g, "");
};/*** 判断结束是否相等* * @param str* @param isCasesensitive* @returns {Boolean}*/
String.prototype.endWith = function(str, isCasesensitive) {if (str == null || str == "" || this.length == 0|| str.length > this.length)return false;var tmp = this.substring(this.length - str.length);if (isCasesensitive == undefined || isCasesensitive) {return tmp == str;} else {return tmp.toLowerCase() == str.toLowerCase();}
};/*** 判断开始是否相等* * @param str* @param isCasesensitive* @returns {Boolean}*/
String.prototype.startWith = function(str, isCasesensitive) {if (str == null || str == "" || this.length == 0|| str.length > this.length)return false;var tmp = this.substr(0, str.length);if (isCasesensitive == undefined || isCasesensitive) {return tmp == str;} else {return tmp.toLowerCase() == str.toLowerCase();}
};/*** 在字符串左边补齐指定数量的字符* * @param c*            指定的字符* @param count*            补齐的次数 使用方法: var str="999"; str=str.leftPad("0",3); str将输出 "000999"* @returns*/
String.prototype.leftPad = function(c, count) {if (!isNaN(count)) {var a = "";for ( var i = this.length; i < count; i++) {a = a.concat(c);}a = a.concat(this);return a;}return null;
};/*** 在字符串右边补齐指定数量的字符* * @param c*            指定的字符* @param count*            补齐的次数 使用方法: var str="999"; str=str.rightPad("0",3); str将输出*            "999000"* @returns*/
String.prototype.rightPad = function(c, count) {if (!isNaN(count)) {var a = this;for ( var i = this.length; i < count; i++) {a = a.concat(c);}return a;}return null;
};/*** 对html字符进行编码 用法: str=str.htmlEncode();* * @returns*/
String.prototype.htmlEncode = function() {return this.replace(/&/g, "&").replace(/</g, "<").replace(/>/g,">").replace(/\"/g, """).replace(/\'/g, "'");
};/*** 对html字符串解码 用法: str=str.htmlDecode();* * @returns*/
String.prototype.htmlDecode = function() {return this.replace(/\&\;/g, '\&').replace(/\>\;/g, '\>').replace(/\<\;/g, '\<').replace(/\"\;/g, '\'').replace(/\&\#39\;/g,'\'');
};/*** 对json中的特殊字符进行转义*/
String.prototype.jsonEscape = function() {return this.replace(/\"/g, """).replace(/\n/g, "&nuot;");
};/*** 对json中的特殊字符进行转义*/
String.prototype.jsonUnescape = function() {return this.replace(/"/g, "\"").replace(/&nuot;/g, "\n");
};/*** 字符串替换* * @param s1*            需要替换的字符* @param s2*            替换的字符。* @returns*/
String.prototype.replaceAll = function(s1, s2) {return this.replace(new RegExp(s1, "gm"), s2);
};/*** 获取url参数* * @returns {object}*/
String.prototype.getArgs = function() {var args = {};if (this.indexOf("?") > -1) {var argStr = this.split("?")[1], argAry = argStr.split("&");for ( var i = 0, c; c = argAry[i++];) {var pos = c.indexOf("=");if (pos == -1)continue;var argName = c.substring(0, pos), argVal = c.substring(pos + 1);argVal = decodeURIComponent(argVal);args[argName] = argVal;}}return args;
};/*** var str=String.format("姓名:{0},性别:{1}","ray","男"); alert(str);* * @returns*/
String.prototype.format = function() {var template = arguments[0];var args = arguments;var str = template.replace(/\{(\d+)\}/g, function(m, i) {var k = parseInt(i) + 1;return args[k];});return str;
};
//====================================增强字符串=============================================////====================================增强数组==============================================//
/*** 移除数组中指定对象*/
Array.prototype.remove = function(val) {for ( var i = 0; i < this.length; i++) {if (this[i] === val) {this.splice(i, 1);i--;}}return this;
};//插入元素
Array.prototype.insert = function(index, item) {this.splice(index, 0, item);return this;
};/*** 去除数组中的重复项* * @function [method]*           判断对象是否相同的方法(可选参数,默认实现是深度匹配两个对象是否相同),示例:function(x,y){if(x.id===y.id)return*           true;}*/
Array.prototype.unique = function(method) {if (!angular.isArray(this))return this;var sameObj = method || function(a, b) {var tag = true;for ( var x in a) {if (!b[x])return false;if (typeof (a[x]) === 'object') {tag = sameObj(a[x], b[x]);} else {if (a[x] !== b[x])return false;}}return tag;}var flag, that = this.slice(0);this.length = 0;for ( var i = 0; i < that.length; i++) {var x = that[i];flag = true;for ( var j = 0; j < this.length; j++) {y = this[j];if (sameObj(x, y)) {flag = false;break;}}if (flag)this[this.length] = x;}return this;
}
//====================================增强数组==============================================////=====================================增强date,获取xxxx-MM-yy hh:mm:ss格式日期==========================================//
/*** 返回当前时间,格式如下:2016-06-06 12:12:12*/
Date.prototype.current = function(){var year = this.getFullYear();var month = (this.getMonth() + 1) < 10 ? (0 + "" + (this.getMonth() + 1)) : (this.getDate() + 1);var date = this.getDate() < 10 ? (0 + "" + this.getDate()) : this.getDate();var hours = this.getHours()  < 10 ? (0 + "" + this.getHours()) : this.getHours();var minutes = this.getMinutes() < 10 ? (0 + "" + this.getMinutes()) : this.getMinutes();var seconds = this.getSeconds() < 10 ? (0 + "" + this.getSeconds()) : this.getSeconds();return year + "-" + month + "-" + date + " " + hours + ":" + minutes + ":" + seconds;			
};/*** 返回当前日期,格式如下:2016-06-06*/
Date.prototype.currentDate = function(){var year = this.getFullYear();var month = this.getMonth() + 1;if(month < 10){month = "0" + month;}var date = this.getDate() < 10 ? (0 + "" + this.getDate()) : this.getDate();return year + "-" + month + "-" + date;
};
//=====================================增强date,获取xxxx-MM-yy hh:mm:ss格式日期==========================================//
上面的代码,提供了一些在java中常用的方法,是的javascript的开发与java的开发非常的相似,嘿嘿,javascript一样可以写的跟java一样的6。比如
var sb = new StringBuffer();
sb.append('hello').append(new Date().getTime()).append();var date = new Date();
date.current();
date.currentDate();var str = "";
str.isEmpty();            //true
str.startWith('aaaa');    // falsevar array = [1,2,2,3];    //[1,2,3]
array.<span style="font-family: Arial, Helvetica, sans-serif;">unique</span>();
        当然,上面的代码,我们是直接通过原型对象扩展了javascript基础对象,下面提供一个日期工具类,用于操作日期的相关操作:比较时间,获取当前月份的第一天和最后一天,格式化日期等
/*** date工具类* 目前只有格式化的功能* * @author 沈少钦* @date 2016-04-20 11:19*/
var DateUtils = {/**** @param  {[Date]} date [日期对象] , if no, then use new Date(). that is current computer date* @param  {[Date]} pattern [格式规则], if no, then use  DateUtils.DEFAULT_DATE_TIME_PATTERN* @return {[string]}      [格式化的日期字符串]*/format: function(date /*optional*/ , pattern /*optional*/ ) {function deal(date, format) {var map = {"M": date.getMonth() + 1, //月份 "d": date.getDate(), //日 "H": date.getHours(), //小时 "m": date.getMinutes(), //分 "s": date.getSeconds(), //秒 "q": Math.floor((date.getMonth() + 3) / 3), //季度 "S": date.getMilliseconds() //毫秒 };format = format.replace(/([yMdHmsqS])+/g, function(all, t) {var v = map[t];if (v !== undefined) {if (all.length > 1) {v = '0' + v;v = v.substr(v.length - 2);}return v;} else if (t === 'y') {return (date.getFullYear() + '').substr(4 - all.length);}return all;});return format;}switch (arguments.length) {case 0:return deal(new Date(), DateUtils._CONS_.DEFAULT_DATE_TIME_PATTERN);case 1:if (arguments[0] instanceof Date) {return deal(arguments[0], DateUtils._CONS_.DEFAULT_DATE_TIME_PATTERN);} else {return deal(DateUtils._CONS_.DEFAULT_DATE_TIME_PATTERN, arguments[0]);}case 2:return deal(arguments[0], arguments[1]);}       },getChineseWeeks: function(date) {if (date === null || date === undefined) {date = new Date();}var value = date.getDay()-1;var result = '星期';switch (value) {case 0:result += "一";break;case 1:result += "二";break;case 2:result += "三";break;case 3:result += "四";break;case 4:result += "五";break;case 5:result += "六";break;case 6:result += "日";break;}return result;},getEnglishWeeks: function(date) {if (date === null || date === undefined) {date = new Date();}var value = date.getDay()-1;switch (value) {case 0:return "Monday";case 1:return "Tuesday";case 2:return "Wensday";case 3:return "Thursday";case 4:return "Friday";case 5:return "Saturday";case 6:return "Sunday";}},/*** 计算时间差* @param  startTime 开始时间* @param  endTime 结束时间* @param  diffType 时间差类型,second,minute,hour,day* @return 返回时间差,整数类型** 使用例子:* var result = DateUtils.getDateDiff("2010-02-26 16:00:00", "2011-07-02 21:48:40", "second");* var result = DateUtils.getDateDiff("2010-02-26 16:00:00", "2011-07-02 21:48:40", "minute");* var result = DateUtils.getDateDiff("2010-02-26 16:00:00", "2011-07-02 21:48:40", "hour");* var result = DateUtils.getDateDiff("2010-02-26 16:00:00", "2011-07-02 21:48:40", "day");*/getDateDiff: function(startTime, endTime, diffType) {//将xxxx-xx-xx的时间格式,转换为 xxxx/xx/xx的格式 startTime = startTime.replace(/\-/g, "/");endTime = endTime.replace(/\-/g, "/");//将计算间隔类性字符转换为小写diffType = diffType.toLowerCase();var sTime = new Date(startTime);      //开始时间var eTime = new Date(endTime);  //结束时间var divNum = 1;switch (diffType) {case "second":divNum = 1000;break;case "minute":divNum = 1000 * 60;break;case "hour":divNum = 1000 * 3600;break;case "day":divNum = 1000 * 3600 * 24;break;default:break;}return parseInt((eTime.getTime() - sTime.getTime()) / parseInt(divNum));},/***  将秒格式化为: x小时z分钟y秒* @param  {int} seconds 秒*/toChineseTime: function(seconds){var hour = "";var minute = parseInt(seconds / 60);seconds = parseInt(seconds % 60);if(minute >= 60){hour = parseInt(minute / 60);minute = parseInt(minute % 60);}var result = seconds + "秒";if(minute){result = minute + "分" + result;}    if(hour){result = hour + "小时" + result;}return result;},/*** 获取当前日期的前几天日期* @param n 间隔天数* @param startDate 起始日期,默认为当天* 使用例子:DateUtils.getBeforeDate(5), DateUtils.getBeforeDate(5, '2016-05-06')* 返回格式如:yyyy-mm-dd*/getBeforeDate: function(n, startDate){var n = n;var d = null;if(!startDate){d = new Date();}else{var strs = startDate.split('-');d = new Date();d.setYear(strs[0]);d.setMonth(strs[1] - 1);d.setDate(strs[2]);}var year = d.getFullYear();var mon=d.getMonth()+1;var day=d.getDate();d.setTime(d.getTime() - n * 1000 * 60 * 60 * 24);year = d.getFullYear();mon = d.getMonth() + 1;day = d.getDate();s = year+"-"+(mon<10?('0'+mon):mon)+"-"+(day<10?('0'+day):day);return s;},/*** 获取当前日期的后几天日期* @param n 间隔天数* @param startDate 起始日期,默认为当天* 使用例子:DateUtils.getAfterDate(5), DateUtils.getAfterDate(5, '2016-05-06')* 返回格式如:yyyy-mm-dd*/getAfterDate: function(n, startDate){var n = n;var d = null;if(!startDate){d = new Date();}else{var strs = startDate.split('-');d = new Date();d.setYear(strs[0]);d.setMonth(strs[1] - 1);d.setDate(strs[2]);}d.setTime(d.getTime() + n * 1000 * 60 * 60 * 24);  //更新时间year = d.getFullYear();mon = d.getMonth() + 1;day = d.getDate();s = year+"-"+(mon<10?('0'+mon):mon)+"-"+(day<10?('0'+day):day);return s;},/*** 获取当前月第一天* @returns {Date}*/getCurrentMonthFirst: function(){var date=new Date();date.setDate(1);return date;},/*** 获取当前月最后一天* @returns {Date}*/getCurrentMonthLast: function(){var date=new Date();var currentMonth=date.getMonth();var nextMonth=++currentMonth;var nextMonthFirstDay=new Date(date.getFullYear(),nextMonth,1);var oneDay=1000*60*60*24;return new Date(nextMonthFirstDay-oneDay);}
}DateUtils._CONS_ = {DEFAULT_DATE_PATTERN: "yyyy-MM-dd", //默认的 年月日模式DEFAULT_DATE_TIME_PATTERN: "yyyy-MM-dd HH:mm:ss", //默认的 完全模式DEFAULT_TIME_PATTERN: "HH:mm:ss", //默认的 时分秒模式DEFAULT_MON_DAY_HOU_MIN_PATTERN: "MM-dd HH:mm", //默认的 月日时分模式DEFAULT_MON_DAY_PATTERN: "MM-dd", //默认的 月日模式DEFAULT_HOU_MIN_PATTERN: "HH:mm" //默认的 时分模式
};

总结

有了上面的例子,我们就可以将javascript一些常用的组件封装起来,形成我们自己的开发类库,以后开发新的项目,直接将这些js类库搬移过去,可以极大的简化我们寻找代码的时间,不必要依赖过多的google,然后copy的过程。

这篇关于丰富自己的javascript类库的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/992141

相关文章

Java实现检查多个时间段是否有重合

《Java实现检查多个时间段是否有重合》这篇文章主要为大家详细介绍了如何使用Java实现检查多个时间段是否有重合,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录流程概述步骤详解China编程步骤1:定义时间段类步骤2:添加时间段步骤3:检查时间段是否有重合步骤4:输出结果示例代码结语作

Java中String字符串使用避坑指南

《Java中String字符串使用避坑指南》Java中的String字符串是我们日常编程中用得最多的类之一,看似简单的String使用,却隐藏着不少“坑”,如果不注意,可能会导致性能问题、意外的错误容... 目录8个避坑点如下:1. 字符串的不可变性:每次修改都创建新对象2. 使用 == 比较字符串,陷阱满

Java判断多个时间段是否重合的方法小结

《Java判断多个时间段是否重合的方法小结》这篇文章主要为大家详细介绍了Java中判断多个时间段是否重合的方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录判断多个时间段是否有间隔判断时间段集合是否与某时间段重合判断多个时间段是否有间隔实体类内容public class D

IDEA编译报错“java: 常量字符串过长”的原因及解决方法

《IDEA编译报错“java:常量字符串过长”的原因及解决方法》今天在开发过程中,由于尝试将一个文件的Base64字符串设置为常量,结果导致IDEA编译的时候出现了如下报错java:常量字符串过长,... 目录一、问题描述二、问题原因2.1 理论角度2.2 源码角度三、解决方案解决方案①:StringBui

Java覆盖第三方jar包中的某一个类的实现方法

《Java覆盖第三方jar包中的某一个类的实现方法》在我们日常的开发中,经常需要使用第三方的jar包,有时候我们会发现第三方的jar包中的某一个类有问题,或者我们需要定制化修改其中的逻辑,那么应该如何... 目录一、需求描述二、示例描述三、操作步骤四、验证结果五、实现原理一、需求描述需求描述如下:需要在

Java中ArrayList和LinkedList有什么区别举例详解

《Java中ArrayList和LinkedList有什么区别举例详解》:本文主要介绍Java中ArrayList和LinkedList区别的相关资料,包括数据结构特性、核心操作性能、内存与GC影... 目录一、底层数据结构二、核心操作性能对比三、内存与 GC 影响四、扩容机制五、线程安全与并发方案六、工程

JavaScript中的reduce方法执行过程、使用场景及进阶用法

《JavaScript中的reduce方法执行过程、使用场景及进阶用法》:本文主要介绍JavaScript中的reduce方法执行过程、使用场景及进阶用法的相关资料,reduce是JavaScri... 目录1. 什么是reduce2. reduce语法2.1 语法2.2 参数说明3. reduce执行过程

如何使用Java实现请求deepseek

《如何使用Java实现请求deepseek》这篇文章主要为大家详细介绍了如何使用Java实现请求deepseek功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1.deepseek的api创建2.Java实现请求deepseek2.1 pom文件2.2 json转化文件2.2

Java调用DeepSeek API的最佳实践及详细代码示例

《Java调用DeepSeekAPI的最佳实践及详细代码示例》:本文主要介绍如何使用Java调用DeepSeekAPI,包括获取API密钥、添加HTTP客户端依赖、创建HTTP请求、处理响应、... 目录1. 获取API密钥2. 添加HTTP客户端依赖3. 创建HTTP请求4. 处理响应5. 错误处理6.

Spring AI集成DeepSeek的详细步骤

《SpringAI集成DeepSeek的详细步骤》DeepSeek作为一款卓越的国产AI模型,越来越多的公司考虑在自己的应用中集成,对于Java应用来说,我们可以借助SpringAI集成DeepSe... 目录DeepSeek 介绍Spring AI 是什么?1、环境准备2、构建项目2.1、pom依赖2.2