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 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
}
|
|