48个JS开发常用工具函数
isStatic:检测数据是不是除了symbol外的原始数据
| 1 | function isStatic(value) { | 
isPrimitive:检测数据是不是原始数据
| 1 | function isPrimitive(value) { | 
isObject:判断数据是不是引用类型的数据 (例如: arrays, functions, objects, regexes, new Number(0),以及 new String(‘’))
| 1 | function isObject(value) { | 
isObjectLike:检查 value 是否是 类对象。 如果一个值是类对象,那么它不应该是 null,而且 typeof 后的结果是 “object”
| 1 | function isObjectLike(value) { | 
getRawType:获取数据类型,返回结果为 Number、String、Object、Array等
| 1 | function getRawType(value) { | 
isPlainObject:判断数据是不是Object类型的数据
| 1 | function isPlainObject(obj) { | 
isArray:判断数据是不是数组类型的数据
| 1 | function isArray(arr) { | 
isRegExp:判断数据是不是正则对象
| 1 | function isRegExp(value) { | 
isDate:判断数据是不是时间对象
| 1 | function isDate(value) { | 
isNative:判断 value 是不是浏览器内置函数
内置函数toString后的主体代码块为 [native code] ,而非内置函数则为相关代码,所以非内置函数可以进行拷贝(toString后掐头去尾再由Function转)
| 1 | function isNative(value) { | 
isFunction:检查 value 是不是函数
| 1 | function isFunction(value) { | 
isLength:检查 value 是否为有效的类数组长度
| 1 | function isLength(value) { | 
isArrayLike:检查 value 是否是类数组
如果一个值被认为是类数组,那么它不是一个函数,并且value.length是个整数,大于等于 0,小于或等于 Number.MAX_SAFE_INTEGER。这里字符串也将被当作类数组。
| 1 | function isArrayLike(value) { | 
isEmpty:检查 value 是否为空
如果是null,直接返回true;如果是类数组,判断数据长度;如果是Object对象,判断是否具有属性;如果是其他数据,直接返回false(也可改为返回true)
| 1 | function isEmpty(value) { | 
cached:记忆函数:缓存函数的运算结果
| 1 | function cached(fn) { | 
camelize:横线转驼峰命名
| 1 | let camelizeRE = /-(\w)/g; | 
hyphenate:驼峰命名转横线命名:拆分字符串,使用 - 相连,并且转换为小写
| 1 | let hyphenateRE = /\B([A-Z])/g; | 
capitalize:字符串首位大写
| 1 | function capitalize(str){ | 
extend:将属性混合到目标对象中
| 1 | function extend(to, _from) { | 
Object.assign:对象属性复制,浅拷贝
| 1 | Object.assign = Object.assign || function(){ | 
clone:克隆数据,可深度克隆
这里列出了原始类型,时间、正则、错误、数组、对象的克隆规则,其他的可自行补充
| 1 | function clone(value, deep){ | 
识别各种浏览器及平台
| 1 | //运行环境是浏览器 | 
getExplorerInfo:获取浏览器信息
| 1 | function getExplorerInfo() { | 
isPCBroswer:检测是否为PC端浏览器模式
| 1 | function isPCBroswer() { | 
unique:数组去重,返回一个新数组
| 1 | function unique(arr){ | 
Set简单实现
| 1 | window.Set = window.Set || (function () { | 
repeat:生成一个重复的字符串,有n个str组成,可修改为填充为数组等
| 1 | function repeat(str, n) { | 
dateFormater:格式化时间
| 1 | function dateFormater(formater, t){ | 
dateStrForma:将指定字符串由一种时间格式转化为另一种
from的格式应对应str的位置
| 1 | function dateStrForma(str, from, to){ | 
getPropByPath:根据字符串路径获取对象属性 : ‘obj[0].count’
| 1 | function getPropByPath(obj, path, strict) { | 
GetUrlParam:获取Url参数,返回一个对象
| 1 | function GetUrlParam(){ | 
downloadFile:base64数据导出文件,文件下载
| 1 | function downloadFile(filename, data){ | 
toFullScreen:全屏
| 1 | function toFullScreen(){ | 
exitFullscreen:退出全屏
| 1 | function exitFullscreen(){ | 
requestAnimationFrame:window动画
| 1 | window.requestAnimationFrame = window.requestAnimationFrame || | 
_isNaN:检查数据是否是非数字值
原生的isNaN会把参数转换成数字(valueof),而null、true、false以及长度小于等于1的数组(元素为非NaN数据)会被转换成数字,这不是我想要的。Symbol类型的数据不具有valueof接口,所以isNaN会抛出错误,这里放在后面,可避免错误
| 1 | function _isNaN(v){ | 
max:求取数组中非NaN数据中的最大值
| 1 | function max(arr){ | 
min:求取数组中非NaN数据中的最小值
| 1 | function min(arr){ | 
random:返回一个lower - upper之间的随机数
lower、upper无论正负与大小,但必须是非NaN的数据
| 1 | function random(lower, upper){ | 
Object.keys:返回一个由一个给定对象的自身可枚举属性组成的数组
| 1 | Object.keys = Object.keys || function keys(object) { | 
Object.values:返回一个给定对象自身的所有可枚举属性值的数组
| 1 | Object.values = Object.values || function values(object) { | 
arr.fill:使用 value 值来填充 array,从start位置开始, 到end位置结束(但不包含end位置),返回原数组
| 1 | Array.prototype.fill = Array.prototype.fill || function fill(value, start, end) { | 
arr.includes:用来判断一个数组是否包含一个指定的值,如果是返回 true,否则false,可指定开始查询的位置
| 1 | Array.prototype.includes = Array.prototype.includes || function includes(value, start){ | 
arr.find:返回数组中通过测试(函数fn内判断)的第一个元素的值
| 1 | Array.prototype.find = Array.prototype.find || function find(fn, ctx){ | 
arr.findIndex :返回数组中通过测试(函数fn内判断)的第一个元素的下标
| 1 | Array.prototype.findIndex = Array.prototype.findIndex || function findIndex(fn, ctx){ | 
performance.timing:利用performance.timing进行性能分析
| 1 | window.onload = function(){ | 
禁止某些键盘事件
| 1 | document.addEventListener('keydown', function(event){ | 
禁止右键、选择、复制
| 1 | ['contextmenu', 'selectstart', 'copy'].forEach(function(ev){ | 

