JavaScript常用工具函数

  1. 检测数据是不是除了symbol外的原始数据
function isStatic(value) {return (typeof value =https://www.huyubaike.com/biancheng/=='string' ||typeof value =https://www.huyubaike.com/biancheng/=='number' ||typeof value =https://www.huyubaike.com/biancheng/=='boolean' ||typeof value =https://www.huyubaike.com/biancheng/=='undefined' ||value =https://www.huyubaike.com/biancheng/== null)}
  1. 检查数据是否为有效的类数组长度
function isLength(value) {return (typeof value =https://www.huyubaike.com/biancheng/='number' &&value > -1 &&value % 1 == 0 &&value <= Number.MAX_SAFE_INTEGER)}
  1. 检查数据是否为函数
function isFunction(value) {return Object.prototype.toString.call(value) === '[object Function]'}
  1. 判断数据是否为时间对象
function isDate(value) {return Object.prototype.toString.call(value) === '[object Date]'}
  1. 判断数据是否为正则对象
function isRegExp(value) {return Object.prototype.toString.call(value) === '[object RegExp]'}
  1. 判断数据是否为数组类型的数据
function isArray(arr) {return Object.prototype.toString.call(arr) === '[object Array]'}
  1. 获取数组中非undefined数据中的最大值
function max(arr) {arr = arr.filter(item => !_isNaN(item))return arr.length ? Math.max.apply(null, arr) : undefined}
  1. 获取数组中非undefined数据中的最小值
function min(arr) {arr = arr.filter(item => !_isNaN(item))return arr.length ? Math.min.apply(null, arr) : undefined}
  1. 横线转驼峰命名
let camelizeRE = /-(\w)/gfunction camelize(str) {return str.replace(camelizeRE, function (_, c) {return c ? c.toUpperCase() : ''})}
  1. 驼峰命名转横线命名:拆分字符串,使用 - 相连,并且转换为小写
let hyphenateRE = /\B([A-Z])/gfunction hyphenate(str) {return str.replace(hyphenateRE, '-$1').toLowerCase()}
  1. 字符串首位大写
function capitalize(str) {return str.charAt(0).toUpperCase() + str.slice(1)}
  1. 深拷贝
function deepCopy(obj, hash = new WeakMap()) {// 日期对象直接返回一个新的日期对象if (obj.constructor === Date) return new Date(obj)// 正则对象直接返回一个新的正则对象if (obj.constructor === RegExp) return new RegExp(obj)// 如果循环引用了就用WeakMap解决if (hash.has(obj)) return hash.get(obj)// 遍历传图参数所有键的特性let allDesc = Object.getOwnPropertyDescriptor(obj)// 继承原型链let copyObj = Object.create(Object.getPrototypeOf(obj), allDesc)hash.set(obj, copyObj)for (let key of Reflect.ownKeys(obj)) {copyObj[key] =isComplexDataType(obj[key]) && typeof obj[key] !== 'function'? deepCopy(obj[key], hash): obj[key]}function isComplexDataType(obj) {return ((typeof obj === 'object' || typeof obj === 'function') && obj !== null)}return copyObj}
  1. 数据深、浅拷贝
function deepCLone(obj) {// 定义变量检测传递参数是对象还是数组let objClone = Array.isArray(obj) ? [] : {}if (obj && typeof obj === 'object' && obj != null) {// 判断obju存在且类型为对象时 , 因为null也是for (let key in obj) {// 遍历对象类型的obj,判断obj中是否存在key属性if (obj.hasOwnProperty(key)) {// 判断如果obj[key]存在且是对象类型时应进行深拷贝,即在堆内存中开辟新的内存if (obj[key] && typeof obj[key] === 'object') {// 递归实现深拷贝objClone[key] = deepCLone(obj[key])} else {// 浅拷贝objClone[key] = obj[key]}}}}return objClone}
  1. 获取数据类型,返回结果为 Number、String、Object、Array等
function getRawType(value) {return Object.prototype.toString.call(value).slice(8, -1)}
  1. 格式化时间
【JavaScript常用工具函数】/** * @name: dateFormater * @msg: 格式化时间 * @param {*} formater 预期时间格式 * @param {*} t 时间,可为空 * @return {*} */function dateFormater(formater, t) {let date = t ? new Date(t) : new Date(),Y = date.getFullYear() + '',M = date.getMonth() + 1,D = date.getDate(),H = date.getHours(),m = date.getMinutes(),s = date.getSeconds()return formater.replace(/YYYY|yyyy/g, Y).replace(/YY|yy/g, Y.substring(2, 2)).replace(/MM/g, (M < 10 ? '0' : '') + M).replace(/DD/g, (D < 10 ? '0' : '') + D).replace(/HH|hh/g, (H < 10 ? '0' : '') + H).replace(/mm/g, (m < 10 ? '0' : '') + m).replace(/ss/g, (s < 10 ? '0' : '') + s)}
  1. 获取url参数,返回一个对象
function GetUrlParam() {let url = document.location.toString()let arrObj = url.split('?')let params = Object.create(null)if (arrObj.length > 1) {arrObj = arrObj[1].split('&')arrObj.forEach(item => {item = item.split('=')params[item[0]] = item[1]})}return params}// ?a=1&b=2&c=3 ==> {a: "1", b: "2", c: "3"}

推荐阅读