简单实用的18个JS代码技巧

news/2025/1/18 9:50:13/

记录一些简单实用的JS代码技巧

1.获取数据类型

封装一个公共函数来获取变量的数据类型

const getType = (value) => {const match = Object.prototype.toString.call(value).match(/ (\w+)]/)return match[1].toLocaleLowerCase()
}getType() // undefined
getType({}}) // object
getType([]) // array
getType(1) // number
getType('fatfish') // string
getType(true) // boolean
getType(/fatfish/) // regexp

2.阻止冒泡事件

适用于所有平台的阻止冒泡事件的公共方法

const stopPropagation = (event) => {event = event || window.event;if (event.stopPropagation) {event.stopPropagation();} else {event.cancelBubble = true;}
};

3.深拷贝对象

深度复制多层嵌套的对象

//第一种
const deepClone=(obj)=>{var objClone = Array.isArray(obj) ? [] : {}if (obj && typeof obj === "object") {for (var key in obj) {// eslint-disable-next-line no-prototype-builtinsif (obj.hasOwnProperty(key)) {if (obj[key] && typeof obj[key] === "object") {objClone[key] = deepClone(obj[key])} else {objClone[key] = obj[key]}}}}return objClone
}
//第一种
const deepCopy = (obj, hash = new WeakMap()) => {if (obj instanceof Date) {return new Date(obj);}if (obj instanceof RegExp) {return new RegExp(obj);}if (hash.has(obj)) {return hash.get(obj);}let allDesc = Object.getOwnPropertyDescriptors(obj);let cloneObj = Object.create(Object.getPrototypeOf(obj), allDesc);hash.set(obj, cloneObj);for (let key of Reflect.ownKeys(obj)) {if (obj[key] && typeof obj[key] === "object") {cloneObj[key] = deepCopy(obj[key], hash);} else {cloneObj[key] = obj[key];}}return cloneObj;
};

4.设置cookie值

封装公共的设置cookie值,提高开发效率

const setCookie = (key, value, expire) => {const d = new Date();d.setDate(d.getDate() + expire);document.cookie = `${key}=${value};expires=${d.toUTCString()}`;
};

5.获取cookie值

除了设置cookie值外,我们还需要获取cookie值

const getCookie = (key) => {const cookieStr = unescape(document.cookie);const arr = cookieStr.split("; ");let cookieValue = "";for (let i = 0; i < arr.length; i++) {const temp = arr[i].split("=");if (temp[0] === key) {cookieValue = temp[1];break;}}return cookieValue;
};

6.删除cookie

删除cookie其实就是给cookie设置过期时间,超过这个时刻它就会立即过期

const delCookie = (key) => {document.cookie = `${encodeURIComponent(key)}=;expires=${new Date()}`;
};

7.生成随机字符串

const randomString = (len) => {let chars = "ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz123456789";let strLen = chars.length;let randomStr = "";for (let i = 0; i < len; i++) {randomStr += chars.charAt(Math.floor(Math.random() * strLen));}return randomStr;
};randomString(10) // pfkMfjEJ6x
randomString(20) // ce6tEx1km4idRNMtym2S

8.从数组中获取一个随机值

类似抽奖,出现一个随机结果

const getRandomValue = array => array[Math.floor(Math.random() * array.length)]; 
const prizes = [  '$100', '🍫', '🍔''1234' ]getRandomValue(prizes) // 🍫
getRandomValue(prizes) // 🍔
getRandomValue(prizes) // 🍫

9.随机生成指定范围内的数值

const randomNum = (min, max) => Math.floor(Math.random() * (max - min + 1)) + min;
randomNum(1, 10) // 6
randomNum(10, 20) // 11

10.将字符串的首字母变成大写

const fistLetterUpper = (str) => {return str.charAt(0).toUpperCase() + str.slice(1);
};fistLetterUpper('fish') // Fish

11.一键滚动到页面顶部

const scrollToTop = () => {window.scrollTo({ top: 0, left: 0, behavior: "smooth" });
};

12.一键滚动到页面底部


const scrollToBottom = () => {window.scrollTo({top: document.documentElement.offsetHeight,left: 0,behavior: "smooth",});
};

13.将元素滚动到可见区域

使用 scrollIntoView 就可以实现将元素滚动到可见区域

const smoothScroll = (element) => {element.scrollIntoView({behavior: "smooth",});
};

14.全屏显示


const goToFullScreen = (element) => {element = element || document.body;if (element.requestFullscreen) {element.requestFullscreen();} else if (element.mozRequestFullScreen) {element.mozRequestFullScreen();} else if (element.msRequestFullscreen) {element.msRequestFullscreen();} else if (element.webkitRequestFullscreen) {element.webkitRequestFullScreen();}
};

15.退出全屏显示


const goExitFullscreen = () => {if (document.exitFullscreen) {document.exitFullscreen();} else if (document.msExitFullscreen) {document.msExitFullscreen();} else if (document.mozCancelFullScreen) {document.mozCancelFullScreen();} else if (document.webkitExitFullscreen) {document.webkitExitFullscreen();}
};

16.判断设备类型

有时候经常会遇到一些在手机端显示逻辑A,在pc端显示逻辑B


const isMobile = () => {return !!navigator.userAgent.match(/(iPhone|iPod|Android|ios|iOS|iPad|Backerry|WebOS|Symbian|Windows Phone|Phone)/i);
};

17.判断设备是Android还是IOS

记得有写过一个H5下载页面,安卓和ios分别对应不同的下载包

const isAndroid = () => {return /android/i.test(navigator.userAgent.toLowerCase());
};const isIOS = () => {let reg = /iPhone|iPad|iPod|iOS|Macintosh/i;return reg.test(navigator.userAgent.toLowerCase());
};

18.货比格式化方法


//让人头疼的正则表达式
const formatMoney = (money) => {return money.replace(new RegExp(`(?!^)(?=(\\d{3})+${money.includes('.') ? '\\.' : '$'})`, 'g'), ',')  
}formatMoney('123456789') // '123,456,789'
formatMoney('123456789.123') // '123,456,789.123'
formatMoney('123') // '123'
//另外一种简单的方法
const formatMoney = (money) => {return money.toLocaleString()
}formatMoney(123456789) // '123,456,789'
formatMoney(123456789.123) // '123,456,789.123'
formatMoney(123) // '123'

http://www.ppmy.cn/news/73730.html

相关文章

RCNN网络原理详解

文章目录 一、前言二、R-CNN原理步骤2.1.Selective Search生成目标检测框2.2.对候选区域使用深度网络提取特征2.3.SVM分类2.4.使用回归器精细修正候选框位置 三、总结参考博客与学习视频 一、前言 学习目标检测当然要学习目标检测领域的开山之作R-CNN,本文为个人笔记。 二、…

Netty实战(五)

ByteBuf—Netty的数据容器 一、什么是ByteBuf二、 ByteBuf 的 API三、ByteBuf 类——Netty 的数据容器3.1 ByteBuf如何工作&#xff1f;3.2 ByteBuf 的使用模式3.2.1 堆缓冲区3.2.2 直接缓冲区3.2.3 复合缓冲区 四、字节级操作4.1 随机访问索引4.2 顺序访问索引4.3 可丢弃字节4…

【Atlas200】Host?Device?RC?EP?

目录 atlas500的ep模式Atlas 200 DK的host侧内存地址的分配Device侧内存管理内存的拷贝复用方案atlas500的ep模式 如上图所示,cpu+内存一侧为host侧;而gpu+显存一侧为device侧。 Atlas 200 DK的 在昇腾310AI处理器(NPU)中,Davinci Core负责专用计算,而Control CPU则负责…

13岁青少年DAO创始人:Web3治好了我的“丧”

“我看大家都死气沉沉的&#xff0c;大家都站起来活动活动。” 4月&#xff0c;香港Web3嘉年华的一场沙龙&#xff0c;橙色针织帽给黑压压的现场带来一抹亮色&#xff0c;13岁的Carry Zheng戴着它登台&#xff0c;没有“大家好”的寒暄&#xff0c;直接向台下的成年人发出指令&…

跨境电商卖家,如何运营Facebook?

随着跨境电商的兴起&#xff0c;越来越多的卖家开始运营Facebook&#xff0c;以吸引更多的潜在客户和提高品牌知名度。那么&#xff0c;作为跨境电商卖家&#xff0c;我们可以在Facebook上做些什么呢&#xff1f; 首先&#xff0c;我们可以通过Facebook建立一个专业的品牌页面&…

IDEA常用插件

目录 一、Codota 二、Auto filling Java call arguments 三、 GsonFormat 四、Rainbow Brackets 五、Maven Helper 六、Key promoter X 七、 换背景图 一、Codota 强大的代码补全工具 二、Auto filling Java call arguments 开发中&#xff0c;我们通常会调用其他已经…

ChatGPT帮你写简历找工作

随着随着毕业时间的到来&#xff0c;应届生将要面临求职问题&#xff0c;根据官方的统计&#xff0c;2023届高校毕业生预计达1158万人&#xff0c;就业市场竞争激烈&#xff0c;无论是校园招聘&#xff0c;招聘会&#xff0c;线上招聘除了自身的准备和个人能力&#xff0c;都会…

DMA直接存储器存取

目录 存储器映像 寄存器 DMA框图 DMA基本结构 DMA请求映射 数据宽度与对齐 ​编辑 存储器到存储器 ​编辑 外设与存储器 来源b站江科大stm3入门教程 存储器映像 寄存器 DMA框图 AHB从设备&#xff08;DMA自身的寄存器&#xff09;连接在总线矩阵右侧的AHB总线上 所以DMA既…