js 一些專案中常用的原型方法整理
這些原型方法有一部分是之前專案的一位大佬寫的,還有一部分是其他專案中用到,自己網上搜羅的,正好今天閒比較閒,想起來整理到一起記錄一下。這個檔案一般可以直接複製到專案中,用來做utils 檔案,裡邊包含了 Date , Number, String, Array 物件上封裝的常用方法,具體請看註釋!如果要拿去做專案的 utils 檔案,可以把這些方法寫在一個立即執行函式中,避免汙染全域性空間!
function Utils() {};
/*
* 格式化金額
* @param money [string/Number] 待精確的金額
* @param precision [int] 小數點後精確位數 預設:4
* e.g.: 1234567.89 => 1,234,567.8900
*/
Utils.prototype.formatMoney = function (money, precision) {
var decimal, formatRound, i, round, temp;
if (precision == null) {
precision = 4;
}
formatRound = function (money) {
return ("" + money).replace(/(\d+?)(?=(?:\d{3})+$)/g, '$1,');
};
money = money + '';
temp = money.split('.');
round = +temp[0];
round = formatRound(round);
if (!precision) {
return round;
}
decimal = '' + Math.round(("." + (temp[1] || 0)) * Math.pow(10, precision));
return (formatRound(round)) + "." + (((function () {
var ref, results;
results = [];
for (i = 0, ref = precision - decimal.length; i < ref; i++) {
results.push('0');
}
return results;
})()).join('')) + decimal;
};
window.Utils = new Utils();
// console.log(Utils.formatMoney(12345677.8888,6))
/*
* 獲得指定日期、時間規範格式<yyyy-MM-dd>|<HH:mm:ss>|<yyyy-MM-dd HH:mm:ss>的字串
* @param param [Object] 選填。JSON物件。
* @param param - date [Date] 選填。欲格式化的Date型別的資料。如為空,則預設當前日期。
* @param param - hasDate [Boolean] 選填。返回的規範化字串帶有“日期”。
* @param param - hasTime [Boolean] 選填。返回的規範化字串帶有“時間”。
* @param param - forward [Number] 選填。提前的天數。支援0和負整數。如果呼叫時帶有此引數,將返回一個包含兩個元素的陣列,第一個日期早於第二個日期。
* 注:此函式是用來追加到Date prototype的,不能直接呼叫。
*/
_formatDate = function (param) {
var H, M, d, date, hD, hT, m, rD, rT, re, s, y;
date = param['date'] || this;
y = date.getFullYear();
M = date.getMonth() + 1;
M = (M + '').length > 1 ? M : '0' + M;
d = date.getDate();
d = (d + '').length > 1 ? d : '0' + d;
H = date.getHours();
H = (H + '').length > 1 ? H : '0' + H;
m = date.getMinutes();
m = (m + '').length > 1 ? m : '0' + m;
s = date.getSeconds();
s = (s + '').length > 1 ? s : '0' + s;
hD = param.hasDate;
hT = param.hasTime;
rD = hD ? y + '-' + M + '-' + d : '';
rT = hT ? H + ':' + m + ':' + s : '';
re = "" + rD + (hD && hT ? ' ' : '') + rT;
date = void 0;
return re;
};
/*
* 獲得指定月份第一天的規範格式<yyyy-MM-dd>的字串
* @param date [Date/String] 必填。指定月份的Date物件或可以轉換成Date物件的字串
*/
_firstDayOfMonth = function (date) {
if (typeof date === 'string') {
date = new Date(date);
}
return new Date(date.setDate(1));
};
/*
* 獲得指定月份最後一天的規範格式<yyyy-MM-dd>的字串
* @param date [Date/String] 必填。指定月份的Date物件或可以轉換成Date物件的字串
*/
_lastDayOfMonth = function (date) {
var re;
if (typeof date === 'string') {
date = new Date(date);
}
date = new Date(date.setDate(1));
re = date.setMonth(date.getMonth() + 1) - 1 * 24 * 60 * 60 * 1000;
return new Date(re);
};
/*
* 獲取格式化日期:2000-01-01
*/
Date.prototype.getFormatDate = function (date) {
if (date == null) {
date = this;
}
return _formatDate.call(this, {
date: date,
hasDate: 1
});
};
/*
* 獲取格式化時間:00:00:00
*/
Date.prototype.getFormatTime = function (date) {
if (date == null) {
date = this;
}
return _formatDate.call(this, {
date: date,
hasTime: 1
});
};
/*
* 獲取格式化日期+時間:2000-01-01 00:00:00
*/
Date.prototype.getFormatDateAndTime = function (date) {
if (date == null) {
date = this;
}
return _formatDate.call(this, {
date: date,
hasDate: 1,
hasTime: 1
});
};
/*
* 獲取指定月份第一天的格式化日期:2000-01-01
* @param date [Date/String]
*/
Date.prototype.firstDayOfMonth = function (date) {
if (date == null) {
date = this;
}
return _firstDayOfMonth.call(this, date);
};
/*
* 獲取指定月份最後一天的格式化日期:2000-01-31
* @param date [Date/String]
*/
Date.prototype.lastDayOfMonth = function (date) {
if (date == null) {
date = this;
}
return _lastDayOfMonth.call(this, date);
};
/*
* 獲取 n 天前的日期(n 可為負)
*/
Date.prototype.beforeDays = function (n, date) {
if (date == null) {
date = this;
}
return new Date(date.getTime() - n * 1000 * 60 * 60 * 24);
};
/*
* 獲取 n 天后的日期(n 可為負)
*/
Date.prototype.afterDays = function (n, date) {
if (date == null) {
date = this;
}
return new Date(date.getTime() + n * 1000 * 60 * 60 * 24);
};
/*
* 獲取 n 個月前的日期(n 可為負)
*/
Date.prototype.beforeMonths = function (n, date) {
if (date == null) {
date = this;
}
return new Date(date.setMonth(date.getMonth() - n));
};
/*
* 獲取 n 天后的日期(n 可為負)
*/
Date.prototype.afterMonths = function (n, date) {
if (date == null) {
date = this;
}
return new Date(date.setMonth(date.getMonth() + n));
};
/*
* 去空格 - 去除全部空格
*/
String.prototype.trimAll = function () {
return this.replace(/\s/g, '');
};
/*
* 去空格 - 前後空格都去掉
*/
String.prototype.trim = function () {
return this.replace(/(^\s*)|(\s*$)/g, '');
};
/*
* 去空格 - 去前面的空格
*/
String.prototype.trimPre = function () {
return this.replace(/(^\s*)/g, '');
};
/*
* 去空格 - 去後面的空格
*/
String.prototype.trimSuf = function () {
return this.replace(/(\s*$)/g, '');
};
/*
* 處理JSON庫
*/
String.prototype.toJSON = function () {
return JSON.parse(this);
};
/*
* 將 $、<、>、"、',與 / 轉義成 HTML 字元
*/
String.prototype.encodeHTML = function (onlyEncodeScript) {
var encodeHTMLRules, matchHTML, str;
if (!this) {
return this;
}
encodeHTMLRules = {
"&": "&",
"<": "<",
">": ">",
'"': '"',
"'": ''',
"/": '/'
};
if (onlyEncodeScript) {
matchHTML = /<\/?\s*(script|iframe)[\s\S]*?>/gi;
str = this.replace(matchHTML, function (m) {
var s;
switch (true) {
case /script/i.test(m):
s = 'script';
break;
case /iframe/i.test(m):
s = 'iframe';
break;
default:
s = '';
}
return "" + encodeHTMLRules['<'] + (-1 === m.indexOf('/') ? '' : encodeHTMLRules['/']) + s + encodeHTMLRules['>'];
});
return str.replace(/on[\w]+\s*=/gi, '');
} else {
matchHTML = /&(?!#?\w+;)|<|>|"|'|\//g;
return this.replace(matchHTML, function (m) {
return encodeHTMLRules[m] || m;
});
}
};
/*
* 將 $、<、>、"、',與 / 從 HTML 字元 反轉義成正常字元
*/
String.prototype.decodeHTML = String.prototype.decodeHTML || function () {
var decodeHTMLRules, matchHTML;
decodeHTMLRules = {
"&": "&",
"<": "<",
">": ">",
'"': '"',
''': "'",
'/': "/"
};
matchHTML = /&|<|>|"|'|//g;
if (this) {
return this.replace(matchHTML, function (m) {
return decodeHTMLRules[m] || m;
});
} else {
return this;
}
};
/*
* 檢測是否是銀行卡號
*/
String.prototype.checkLuhn = function () {
var count, i, len, n, num, sum;
num = this.split('');
len = num.length;
sum = 0;
for (i = 0; i < len; i++) {
count = i + 1;
n = +num[len - 1 - i];
if (count % 2 === 0) {
n = n * 2;
if (!(n < 10)) {
n = n - 9;
}
}
sum += n;
}
return sum % 10 === 0;
};
//格式化身份證號
String.prototype.IDCrdFormat = function () {
let str = this.trimAll()
for (let i = 0; i < str.length; i++) {
if (i === 3 || i === 7 || i === 12 || i === 17) {
str = str.slice(0, i) + ' ' + str.slice(i)
}
}
return str
}
// 計算字元長度
String.prototype.getByteLen = function () {
var len = 0;
for (var i = 0; i < this.length; i++) {
var a = this.charAt(i);
if (a.match(/[^\x00-\xff]/ig) != null) {
len += 2;
} else {
len += 1;
}
}
return len;
}
//驗證手機號和使用者名稱
String.prototype.phoneReg = function () {
const phoneReg = /^0?(13|14|15|16|17|18|19)[0-9]{9}$/
return phoneReg.test(this)
}
//驗證郵箱
String.prototype.emailReg = function () {
const emailReg = /^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/
return emailReg.test(this)
}
//判斷密碼中文字元
String.prototype.chineseReg = function () {
const chineseReg = /([\u4E00-\u9FA5]|[\uFE30-\uFFA0])+/
return chineseReg.test(this)
}
//特殊字元(含空格)
String.prototype.characterReg = function () {
const nameReg = /^[\u4E00-\u9FA5A-Za-z0-9]+$/
return !nameReg.test(this)
}
/*
* Array: 判斷當前 array 中是否存在指定元素
*/
Array.prototype.has = function (obj) {
return this.indexOf(obj) !== -1;
};
/*
* Array: 獲取最後一個元素
*/
Array.prototype.last = function () {
return this[this.length - 1];
};
/*
* Array: 去重
* @param bool [Boolean] 是否返回移除的元素array 預設false
*/
Array.prototype.unique = function (bool) {
var hash, j, l, len1, len2, obj, re, result;
if (bool == null) {
bool = false;
}
result = [];
re = [];
hash = {};
if (bool) {
for (j = 0, len1 = this.length; j < len1; j++) {
obj = this[j];
if (hash[obj]) {
re.push(obj);
} else {
result.push(obj);
hash[obj] = true;
}
}
return [result, re];
} else {
for (l = 0, len2 = this.length; l < len2; l++) {
obj = this[l];
if (!hash[obj]) {
result.push(obj);
hash[obj] = true;
}
}
return result;
}
};
/*
* Array: 移除引數中的元素
*/
Array.prototype.remove = function (obj) {
var i;
i = this.indexOf(obj);
if (i === -1) {
return null;
}
return this.splice(i, 1)[0];
};
/*
* 精確小數點位數
* @param count [int] 精確小數點後位數
* @param round [Boolean] 是否四捨五入(預設:yes)
*/
Number.prototype.accurate = function (count, round) {
var i, l, len, num, re, str, temp, txt;
if (round == null) {
round = true;
}
if (this.valueOf() === 0) {
if (count === 0) {
return '0';
}
re = '0.';
for (i = 0; i < count; i++) {
re += '0';
}
return re;
}
temp = Math.pow(10, count);
num = Math[round ? 'round' : 'floor'](this * temp);
num = num / temp;
str = num.toString();
len = count - str.replace(/^\d+\.*/, '').length;
txt = str;
if (len) {
txt += (num % 1 === 0 ? '.' : '');
}
for (i = 0; i < len; i++) {
txt += '0';
}
return txt;
};
/*
* int 隨機數
* @param min [int] 隨機範圍的最小數字
* @param max [int] 隨機範圍的最大數字
*/
Math.intRange = function (min, max) {
if (min == null) {
min = 0;
}
if (max == null) {
max = 0;
}
return min + Math.round(Math.random() * (max - 1));
};
相關文章
- 專案中常用到的一些方法整理
- 常用JS方法整理JS
- js常用方法整理JS
- 原生js的常用方法整理JS
- 整理一些 JDK 中 Integer 實用但不常用的方法JDK
- js中修改this的指向方法整理JS
- js進擊--一些常用小方法JS
- js 中的原型JS原型
- JS中的原型與原型鏈JS原型
- 理解js中的原型,原型物件,原型鏈JS原型物件
- 一些不常用的工具整理
- JS中的原型物件JS原型物件
- js中Object那些不常用的方法JSObject
- 專案常用JS方法封裝(三) [ 字串相關處理 ]JS封裝字串
- 常用的js方法JS
- 整理的一些常用到的 Nginx 配置Nginx
- 專案常用JS方法封裝(四) [ 陣列相關處理 ]JS封裝陣列
- 專案常用JS方法封裝(二) [ 時間相關處理 ]JS封裝
- JS中字串和陣列的常用方法JS字串陣列
- 說說JS中的原型物件和原型鏈JS原型物件
- js console一些常用的功能JS
- MySQL的一些常用的SQL語句整理MySql
- 關於一些爬蟲專案教程的整理(轉載)爬蟲
- 專案中關於解構的常用用法,我都幫你整理好了
- js中陣列常用方法總結JS陣列
- 專案管理有哪些常用的方法和工具?專案管理
- 追蹤專案進展常用的衡量方法
- 個人JS常用類庫整理JS
- 專案中封裝的time_util常用的方法封裝
- JS 往原型中新增方法JS原型
- 在專案中遇到的一些bug
- Js方法整理自用(未完)JS
- 專案經理常用專案管理工具及方法專案管理
- JS中的繼承與原型鏈JS繼承原型
- 常用的String原型原型
- js中浮點數計算常用方法JS
- 一次性搞懂js中的原型與原型鏈JS原型
- vue專案中獲取外部js,並使用其中方法VueJS