记录一些js方法


本文皆为遇到过的一些方法,只是简单记录一下,可能没有考虑到全部情况,如果有不对的地方,请指教

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' });
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值