当前位置: 首页 > news >正文

前端工具类大全--【成果版】

目录

📚前言 

如何判断Dom节点

Object.keys 

 Object.assign

Object.create 

 判断Number类型

判断String类型

判断Function类型

判断Object类型 

判断Array类型

判断RegExp类型 

遍历forEach

遍历map 

indexOf 


 📚前言 

前端最苦恼的问题之一就是兼容性问题。所以这篇文章它来了,我们来实现一下常见方法的兼容性写法以此来提高我们代码的健壮性。(欢迎大家来探讨~~) 

  • 如何判断Dom节点

export function isDom(value) {return typeof value === 'object'&& typeof value.nodeType === 'number'&& typeof value.ownerDocument === 'object'
}
  • Object.keys 

只需要当前obj的key,忽略其原型链
  •  Object.assign

export function extend(target, obj) {if (Object.assign) {Object.assign(target, obj)} else {for (let key in obj) {if (obj.hasOwnProperty(key) && key !== protoKey) {target[key] = obj[key]}}}return target;
}
const protoKey = '__proto__';

同样也是在当前obj内操作并且忽略key === '__proto__'的情况,这个是在处理原型污染系统环境!

  • Object.create 

extend函数如上
  •  判断Number类型

export function isNumber(value) {return typeof value === 'number';
}
  1. 在chromium和webkit上的表现判断方法比toString.call更快;
  2. new Number()很少被使用

  • 判断String类型

  1. 在chromium和webkit上的表现判断方法比toString.call更快;
  2. new String()很少被使用

  • 判断Function类型

export function isFunction(value: any): value is Function {return typeof value === 'function';
}
  • 判断Object类型 

双感叹号用于判断truly还是falsly

所以和上面的Object.keys相呼应了。tip:如果type === 'function',则Object.keys返回[]空数组 

  • 判断Array类型

export function isArray(value) {if (Array.isArray) {return Array.isArray(value);}return objToString.call(value) === '[object Array]';
}
  • 判断RegExp类型 

const objToString = Object.prototype.toString;
  • 遍历forEach

const arrayProto = Array.prototype;
const nativeForEach = arrayProto.forEach;

部分地方我做了注释,至于call方法为什么传那些参数,可参考MDN手册

  • 遍历map 

export function map(arr, cb, context) {if (!arr) {return [];}if (!cb) {return slice(arr);}if (arr.map && arr.map === nativeMap) {return arr.map(cb, context);} else {const result = [];for (let i = 0, len = arr.length; i < len; i++) {result.push(cb.call(context, arr[i], i, arr));}return result;}
}

const nativeMap = arrayProto.map;

它和forEach很像,就差一个返回值的输出

  • indexOf 

来个TS版的

文章不定期更新,收藏不迷路~~


 如果觉得有收获,麻烦给个赞和关注。你的鼓励是我写作的动力,大家一起学习一起进步。


http://www.mrgr.cn/news/55859.html

相关文章:

  • 基于jsp高校人事管理系统【附源码】
  • mysql用户密码基础
  • docker 部署单节点的etcd以及 常用使用命令
  • 请解读下面的程序:pat =re.compile(r‘\d+‘)res = pat.search(‘www.ddd996.com‘)res.group()
  • 【Next.js 项目实战系列】03-查看 Issue
  • 手机数据恢复技巧:适用于手机的恢复应用程序
  • 酒店智能轻触开关的工作原理
  • Vue+TypeScript+SpringBoot的WebSocket基础教学
  • 一篇文章系统看懂大模型
  • jmeter之控制tps压测
  • 综述:超构表面赋能多维度光学成像研究
  • Mermaid流程图完全指南
  • 字符设备、块设备和网络设备
  • 端到端自动驾驶模型SparseDrive部署过程
  • 2024年华为OD机试真题-高矮个子排队-Python-OD统一考试(E卷)
  • 鼠标移入图片实现遮住层效果2种方法
  • 01 Druid未授权错误及解决方案
  • MySQL创建库,设计表
  • Python酷库之旅-第三方库Pandas(159)
  • MATLAB中issorted函数用法
  • 新版纯真ip数据库的使用
  • 知识见闻 - 什么是项目
  • Qt中使用线程之QThread
  • 前端——根据状态的不同,显示不同的背景颜色
  • 使用python自制桌面宠物,好玩!——枫原万叶桌宠,可以直接打包成exe去跟朋友炫耀。。。
  • HW支持-定时扫描局域网内所有设备MAC不在白名单则邮件提醒