本文参加了由公众号@若川视野 发起的每周源码共读活动, 点击了解详情一起参与。
本期学习的是工具函数,在平时的业务开发中,我们经常的遇到一个需要判断数据类型,或者有数据去重的要求,封装成一个函数比较方便。
总是返回false的函数
var no = function (a, b, c) { return false; };
isDef 是否是已经定义
function isDef (v) {
return v !== undefined && v !== null
}
isDef 是否是已经定义
function isDef (v) {
return v !== undefined && v !== null
}
判断是否为true
function isTrue (v) {
return v === true
}
判断是否为false
function isFalse (v) {
return v === false
}
isPrimitive 判断值是否是原始值
判断是否是字符串、或者数字、或者 symbol、或者布尔值。
function isPrimitive (value) {
return (
typeof value === 'string' ||
typeof value === 'number' ||
typeof value === 'symbol' ||
typeof value === 'boolean'
)
}
isObject 判断是否为对象
function isObject (obj) {
return obj !== null && typeof obj === 'object'
}
//因为typeof null 是object,所以在这里排除一下
判断变量类型
var _toString = Object.prototype.toString;
function toRawType (value) {
return _toString.call(value).slice(8, -1)
}
isRegExp 是否是正则表达式
function isRegExp (v) {
return _toString.call(v) === '[object RegExp]'
}
isPromise 判断是否是 promise
function isPromise (val) {
return (
isDef(val) &&
typeof val.then === 'function' &&
typeof val.catch === 'function'
)
}
toNumber 转数字
如果转换失败依旧返回原始字符串。
function toNumber (val) {
var n = parseFloat(val);
return isNaN(n) ? val : n
}
remove 移除数组中的中一项
function remove (arr, item) {
if (arr.length) {
var index = arr.indexOf(item);
if (index > -1) {
return arr.splice(index, 1)
}
}
}
capitalize 首字母转大写
var capitalize = cached(function (str) {
return str.charAt(0).toUpperCase() + str.slice(1)
});
once 确保函数只执行一次
比如在vue的create中,once函数的功能与之类似。
function once (fn) {
var called = false;
return function () {
if (!called) {
called = true;
fn.apply(this, arguments);
}
}
}
总结:之前我一直以为这个js写的工具函数会很简单,现在读完之后,发现自己能看懂的不多。编程中,最忌讳的就是眼高手低,我们一定要着手于现在,不断加油。感谢川哥的分享。
这是源码共读的第24期,链接:juejin.cn/post/707976…