JS开发常用工具函数(小结)

1、isStatic:检测数据是不是除了symbol外的原始数据

function isStatic(value) { return( typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean' || typeof value === 'undefined' || value === null ) }

2、isPrimitive:检测数据是不是原始数据

function isPrimitive(value) { return isStatic(value) || typeof value === 'symbol' }

3、isObject:判断数据是不是引用类型的数据 (例如: arrays, functions, objects, regexes, new Number(0),以及 new String(''))

function isObject(value) { let type = typeof value; return value != null && (type == 'object' || type == 'function'); }

4、isObjectLike:检查 value 是否是 类对象。 如果一个值是类对象,那么它不应该是 null,而且 typeof 后的结果是 "object"

function isObjectLike(value) { return value != null && typeof value == 'object'; }

5、getRawType:获取数据类型,返回结果为 Number、String、Object、Array等

function getRawType(value) { return Object.prototype.toString.call(value).slice(8, -1) } //getoRawType([]) ==> Array

6、isPlainObject:判断数据是不是Object类型的数据

function isPlainObject(obj) { return Object.prototype.toString.call(obj) === '[object Object]' }

7、isArray:判断数据是不是数组类型的数据

function isArray(arr) { return Object.prototype.toString.call(arr) === '[object Array]' }

将isArray挂载到Array上

Array.isArray = Array.isArray || isArray;

8、isRegExp:判断数据是不是正则对象

function isRegExp(value) { return Object.prototype.toString.call(value) === '[object RegExp]' }

9、isDate:判断数据是不是时间对象

function isDate(value) { return Object.prototype.toString.call(value) === '[object Date]' }

10、isNative:判断 value 是不是浏览器内置函数

内置函数toString后的主体代码块为 [native code] ,而非内置函数则为相关代码,所以非内置函数可以进行拷贝(toString后掐头去尾再由Function转)

function isNative(value) { return typeof value === 'function' && /native code/.test(value.toString()) }

11、isFunction:检查 value 是不是函数

function isFunction(value) { return Object.prototype.toString.call(value) === '[object Function]' }

12、isLength:检查 value 是否为有效的类数组长度

function isLength(value) { return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= Number.MAX_SAFE_INTEGER; }

13、isArrayLike:检查 value 是否是类数组

如果一个值被认为是类数组,那么它不是一个函数,并且value.length是个整数,大于等于 0,小于或等于 Number.MAX_SAFE_INTEGER。这里字符串也将被当作类数组

function isArrayLike(value) { return value != null && isLength(value.length) && !isFunction(value); }

14、isEmpty:检查 value 是否为空

如果是null,直接返回true;如果是类数组,判断数据长度;如果是Object对象,判断是否具有属性;如果是其他数据,直接返回false(也可改为返回true)

function isEmpty(value) { if (value == null) { return true; } if (isArrayLike(value)) { return !value.length; }else if(isPlainObject(value)){ for (let key in value) { if (hasOwnProperty.call(value, key)) { return false; } } return true; } return false; }

15、cached:记忆函数:缓存函数的运算结果

function cached(fn) { let cache = Object.create(null); return function cachedFn(str) { let hit = cache[str]; return hit || (cache[str] = fn(str)) } }

16、camelize:横线转驼峰命名

let camelizeRE = /-(\w)/g; function camelize(str) { return str.replace(camelizeRE, function(_, c) { return c ? c.toUpperCase() : ''; }) } //ab-cd-ef ==> abCdEf //使用记忆函数 let _camelize = cached(camelize)

17、hyphenate:驼峰命名转横线命名:拆分字符串,使用 - 相连,并且转换为小写

let hyphenateRE = /\B([A-Z])/g; function hyphenate(str){ return str.replace(hyphenateRE, '-$1').toLowerCase() } //abCd ==> ab-cd //使用记忆函数 let _hyphenate = cached(hyphenate);

18、capitalize:字符串首位大写

function capitalize(str){ return str.charAt(0).toUpperCase() + str.slice(1) } // abc ==> Abc //使用记忆函数 let _capitalize = cached(capitalize)

19、extend:将属性混合到目标对象中

function extend(to, _from) { for(let key in _from) { to[key] = _from[key]; } return to }

20、Object.assign:对象属性复制,浅拷贝

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/d03bff36ccafe3fa2db6febf277a601b.html