vue源码中的检测方法的实现


Posted in Javascript onSeptember 26, 2019

判断是否为undefined或null

const isDef = (v) => {
 return v !== undefined && v !== null
}

判断是否为Promise 函数

const isPromise = (val) => {
 return (
  val !== undefine &&
  typeof val.then === 'function' &&
  typeof val.catch === 'function'
 )
}

判断是否为简单数据类型

const isPrimitive (value) => {
 return (
  typeof value === 'string' ||
  typeof value === 'number' ||
  typeof value === 'symbol' ||
  typeof value === 'boolean'
 )
}

严格检查复杂数据类型

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

const isRegExp = (v) => {
 return Object.prototype.toString.call(v) === '[object RegExp]'
}

将驼峰字符串转成连接符 magicEightTall 转换成 magic-eight-tall

const hyphenateRE = /\B([A-Z])/g
const hyphenate = (str) => {
 return str.replace(hyphenateRE, '-$1').toLowerCase()
}

将连接符转成驼峰字符串 magic-eight-tall 转换成 magicEightTall

const camelizeRE = /-(\w)/g
const camelize = (str) => {
  return str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : '')
}

如果不想重复转换,可用以下方法调用转换函数

const cached = (fn) => {
  const cache = Object.create(null)
  console.log(cache);
  return ((str) => {
   const hit = cache[str]
   return hit || (cache[str] = fn(str))
  })
};


const camelize = cached((str) => {
  return str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : '')
})

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript实现的固定位置悬浮窗口实例
Apr 30 Javascript
JS数字抽奖游戏实现方法
May 04 Javascript
JavaScript实现的经典文件树菜单效果
Sep 08 Javascript
详解jQuery lazyload 懒加载
Dec 19 Javascript
基于JQuery及AJAX实现名人名言随机生成器
Feb 10 Javascript
纯JS实现轮播图
Feb 22 Javascript
微信小程序支付之c#后台实现方法
Oct 19 Javascript
自定义PC微信扫码登录样式写法
Dec 12 Javascript
原生JS实现轮播图效果
Oct 12 Javascript
jQuery分组选择器简单用法示例
Apr 04 jQuery
微信小程序版本自动更新的方法
Jun 14 Javascript
在实例中重学JavaScript事件循环
Dec 03 Javascript
IntelliJ IDEA编辑器配置vue高亮显示
Sep 26 #Javascript
layer.open 子页面弹出层向父页面传输数据的例子
Sep 26 #Javascript
Vue项目环境搭建详细总结
Sep 26 #Javascript
layer.open 获取不到表单信息的解决方法
Sep 26 #Javascript
layui: layer.open加载窗体时出现遮罩层的解决方法
Sep 26 #Javascript
layUI使用layer.open,在content打开数据表格,获取值并返回的方法
Sep 26 #Javascript
对Layer弹窗使用及返回数据接收的实例详解
Sep 26 #Javascript
You might like
桌面中心(二)数据库写入
2006/10/09 PHP
Linux下ZendOptimizer的安装与配置方法
2007/04/12 PHP
PHP is_array() 检测变量是否是数组的实现方法
2016/06/13 PHP
PHP实现的mongoDB数据库操作类完整实例
2018/04/10 PHP
js下将字符串当函数执行的方法
2011/07/13 Javascript
Node.js中对通用模块的封装方法
2014/06/06 Javascript
js实现屏幕自适应局部代码分享
2015/01/30 Javascript
同一个网页中实现多个JavaScript特效的方法
2015/02/02 Javascript
基于JavaScript将表单序列化类型的数据转化成对象的处理(允许对象中包含对象)
2015/12/28 Javascript
AngularJS中如何使用$parse或$eval在运行时对Scope变量赋值
2016/01/25 Javascript
jQuery实现数字自动增加或者减少的动画效果示例
2018/12/11 jQuery
vue组件化中slot的基本使用方法
2019/05/01 Javascript
[46:43]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#2LGD VS MVP.Phx第二局
2016/03/02 DOTA
Python3基础之基本数据类型概述
2014/08/13 Python
Python import自定义模块方法
2015/02/12 Python
在Python中操作列表之list.extend()方法的使用
2015/05/20 Python
TensorFLow用Saver保存和恢复变量
2018/03/10 Python
关于python2 csv写入空白行的问题
2018/06/22 Python
解决Python 中英文混输格式对齐的问题
2018/07/16 Python
pyqt弹出新对话框,以及关闭对话框获取数据的实例
2019/06/18 Python
python实现连连看辅助(图像识别)
2020/03/25 Python
python3字符串操作总结
2019/07/24 Python
如何在Django配置文件里配置session链接
2019/08/06 Python
python lambda函数及三个常用的高阶函数
2020/02/05 Python
Python如何把多个PDF文件合并代码实例
2020/02/13 Python
对Python 字典元素进行删除的方法
2020/07/31 Python
详解Python 中的容器 collections
2020/08/17 Python
python开根号实例讲解
2020/08/30 Python
关于Python错误重试方法总结
2021/01/03 Python
python 获取计算机的网卡信息
2021/02/18 Python
ghd官网:英国ghd直发器品牌
2018/05/04 全球购物
.net面试题
2016/09/17 面试题
解释i节点在文件系统中的作用
2013/11/26 面试题
文艺晚会主持词
2014/03/24 职场文书
新学期开学演讲稿
2014/05/24 职场文书
学生安全责任书模板
2014/07/25 职场文书