众所皆知的vue2工具函数

249 阅读2分钟

本文参加了由公众号@若川视野 发起的每周源码共读活动, 点击了解详情一起参与。

本期学习的是工具函数,在平时的业务开发中,我们经常的遇到一个需要判断数据类型,或者有数据去重的要求,封装成一个函数比较方便。

总是返回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…