方法目录
本文皆为遇到过的一些方法,只是简单记录一下,可能没有考虑到全部情况,如果有不对的地方,请指教
1. 获取url中的值
function getUrlParam(name) {
let reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)');
let r = window.location.search.substr(1).match(reg);
if (r != null) {
return decodeURI(r[2]);
} else {
return null;
}
}
getQueryString(name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
var reg_rewrite = new RegExp("(^|/)" + name + "/([^/]*)(/|$)", "i");
var r = window.location.search.substr(1).match(reg);
var q = window.location.pathname.substr(1).match(reg_rewrite);
if (r != null) {
return decodeURI(r[2]);
} else if (q != null) {
return decodeURI(q[2]);
} else {
return null;
}
},
2. 判断浏览器类型
//判断是否微信浏览器
function isWeiXin() {
let ua = window.navigator.userAgent.toLowerCase();
if (ua.match(/MicroMessenger/i) == 'micromessenger') {
return true; // 微信中打开
} else {
return false; // 普通浏览器中打开
}
}
//判断是否是qq浏览器
function isQQ() {
var sUserAgent = navigator.userAgent.toLowerCase();
if (sUserAgent.match(/QQ/i) == 'qq') {
return true;
} else {
return false;
}
}
3.将金额格式转变为间隔三个加入逗号
addCommasToNumber(number) {
if(!number){
return "0";
}
// 将数字转换为字符串
var str = number.toString();
// 使用正则表达式将字符串按每三位进行分隔
str = str.replace(/\B(?=(\d{3})+(?!\d))/g, ",");
// 返回添加了逗号的字符串
return str;
},
也可以使用
number.toLocaleString()
解释:toLocaleString() 用于将数字转换为本地格式的字符串表示("en-US"值可以将数字转换为间隔三个加入逗号,不添加也可以)。它根据用户的本地化设置,将数字转换为本地化的格式,包括数字的分组、小数点的表示等。这个方法通常用于将数字格式化为本地化的货币、日期、时间等格式。
4. 监听浏览器窗口大小变化
window.addEventListener('resize', () => {
const w = document.documentElement.clientWidth;
const h = document.documentElement.clientHeight;
console.log('页面大小发生了变化', `宽度:${w}`, `高度:${h}`);
});
5. 时间相关
5.1 获取当前时间
function getCurrentDateTime() {
// 年y 月M 日d 时h 分m 秒s
const currentDate = new Date();
const year = currentDate.getFullYear();
const month = (currentDate.getMonth() + 1).toString().padStart(2, "0");
const day = currentDate.getDate().toString().padStart(2, "0");
const week = currentDate.getDay();
// 将数字转换为中文星期几
const weeks = [
"星期日",
"星期一",
"星期二",
"星期三",
"星期四",
"星期五",
"星期六",
];
const weekText = weeks[week];
const hours = currentDate.getHours().toString().padStart(2, "0");
const minutes = currentDate.getMinutes().toString().padStart(2, "0");
const seconds = currentDate.getSeconds().toString().padStart(2, "0");
let str = format;
str = str.replaceAll("y", year);
str = str.replaceAll("M", month);
str = str.replaceAll("d", day);
str = str.replaceAll("w", weekText);
str = str.replaceAll("h", hours);
str = str.replaceAll("m", minutes);
str = str.replaceAll("s", seconds);
return str;
}
5.2 获取当前一周的年月日
function getCurrentDateWeek() {
const today = new Date();
const currentDay = today.getDay(); // 获取当前是星期几,0 表示星期日,1 表示星期一,以此类推
const diff = today.getDate() - currentDay + (currentDay === 0 ? -6 : 1); // 计算本周的第一天是几号
const weekDates = [];
for (let i = 0; i < 7; i++) {
const date = new Date(today.setDate(diff + i));
const year = date.getFullYear();
const month = date.getMonth() + 1; // 月份是从 0 开始的,所以要加 1
const day = date.getDate();
weekDates.push({ year, month, day });
}
return weekDates;
}
5.3 计算出某一年的周数并返回每周开始时间,结束时间(周一到周日为一周,周一在哪年,这周便属于那年)
function weeksInYear(year) {
let weeksArray = [];
let startDate = new Date(year, 0, 1);
let endDate = new Date(year, 11, 31);
let weekCount = 0;
let currentDate = new Date(startDate);
while (currentDate <= endDate) {
if (currentDate.getDay() === 1) {
weekCount++;
let weekStartDate = new Date(currentDate);
let weekEndDate = new Date(currentDate);
weekEndDate.setDate(weekEndDate.getDate() + 6);
weeksArray.push({
weekNum: weekCount,
start: weekStartDate.toLocaleDateString(),
end: weekEndDate.toLocaleDateString()
});
}
currentDate.setDate(currentDate.getDate() + 1);
}
return weeksArray;
}
6. 深复制
function deepClone(source, cloned = new WeakMap()) {
// 获取数据类型
let type = Object.prototype.toString.call(source).slice(8, -1)
if(type !== "Object" && type !== "Array"){
return source
}
// 检查是否复制过该对象,解决循环引用
if(cloned.has(source)) {
return cloned.get(source)
}
let result = type === "Array" ? [] : {}
cloned.set(source, result)
for(let j in source) {
if(source.hasOwnProperty(j)){
result[j] = deepClone(source[j], cloned)
}
}
return result
}
// 测试数据
let obj = { name: '1', address: {x: 100, y: 100}}
obj.o = obj
obj.address.z = obj
console.log(deepClone(obj))
7.跳转到页面中对应位置
const element = document.getElementById(obj.id);
if (element) {
element.scrollIntoView({ behavior: 'smooth', block: 'start' });
}