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

ops/2024/10/23 6:50:28/

目录

📚前言 

如何判断Dom节点

Object.keys 

 Object.assign

Object.create 

 判断Number类型

判断String类型

判断Function类型

判断Object类型 

判断Array类型

判断RegExp类型 

遍历forEach

遍历map 

indexOf 


 📚前言 

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

  • 如何判断Dom节点

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

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

javascript">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;
}
javascript">const protoKey = '__proto__';

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

  • Object.create 

extend函数如上
  •  判断Number类型

javascript">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类型

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

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

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

  • 判断Array类型

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

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

javascript">const arrayProto = Array.prototype;
const nativeForEach = arrayProto.forEach;

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

  • 遍历map 

javascript">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;}
}

javascript">const nativeMap = arrayProto.map;

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

  • indexOf 

来个TS版的

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


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


http://www.ppmy.cn/ops/127760.html

相关文章

Python实现基于WebSocket的stomp协议调试助手工具分享

stomp协议很简单&#xff0c;但是搜遍网络竟没找到一款合适的客户端工具。大多数提供的都是客户端库的使用。可能是太简单了吧&#xff01;可是即便这样&#xff0c;假如有一可视化的工具&#xff0c;将方便的对stomp协议进行抓包调试。网上类似MQTT的客户端工具有很多&#xf…

vscode 编译c++代码问题

vscode 编译代码时 include 报错 vscode 编译代码时 include 报错&#xff0c;目标代码有 include 自己写的头文件&#xff0c;报错找不到对应的头文件 * Executing task: C/C: g.exe build active file Starting build... cmd /c chcp 65001>nul && C:\msys64\uc…

linux替换某个文件的某段内容命令

假设文件是a.sql 里面的库是abc&#xff0c;我想把这个abc给替换掉&#xff0c;改成hahaha cat a.sql |grep abc|sed -i s/abc/hahaha/g a.sql 如果想写个脚本指定整个文件夹中的内容替换 #!/bin/bash # 检查是否提供了文件夹路径 if [ -z "\$1" ]; then echo &…

-1比sizeof(char)大?

下列参数代码的输出: char *usrName"hello world" if(-1<sizeof(usrName)) {printf("NG\n"); } else {printf("OK\n"); }正确答案&#xff1a;OK\n 为什么会造成这样的结果&#xff0c;由于进行比较运算时&#xff0c;需要将先将两个数据转换…

爬虫学习——26.JS逆向(2)

AES与DES DES对称加密,是一种比较传统的加密方式,其加密运算、解密运算使用的是同样的密钥,信息的发送者。 和信息的接收者在进行信息的传输与处理时,必须共同持有该密钥(称为对称密码),是一种对称加密算法。一般来说加密用的是encrypt()函数,解密用的是decrypt()函数。 AE…

木木模拟器 MuMuPlayer Pro for Mac 下载安装详细教程(无需激活)

MuMu 安卓模拟器是网易推出的一款可以在 Mac 上安装运行手机软件游戏的模拟器&#xff0c;目前来说在 MAC 上木木是目前最好的选择没有之一&#xff0c;目前经过几次迭代也是支持适配了市面上大多数主流游戏软件。 有需要在 Mac 上安装运行手机游戏的朋友可以参看本文下载安装…

Java面试题库——反射机制

1.Java中什么是反射&#xff1f; 是指在运行状态中&#xff0c;对于任意一个类都能够知道这个类所有的属性和方法&#xff1b; 并且对于任意一个对象&#xff0c;都能够调用它的任意一个方法&#xff1b;这种动态获取信息以及动态调用对象方法的功能称为Java语言的反射机制。2…

[实时计算flink]DataStream连接器设置方法

背景信息 如果您通过DataStream的方式读写数据&#xff0c;则需要使用对应的DataStream连接器连接Flink全托管。Maven中央库中已经放置了VVR DataStream连接器&#xff0c;以供您在作业开发时直接使用。您可以通过以下任何一种方式来使用连接器&#xff1a; &#xff08;推荐&…