A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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
}


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马