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 相关文章推荐
jQuery使用attr()方法同时设置多个属性值用法实例
Mar 26 Javascript
使用BootStrap实现用户登录界面UI
Aug 10 Javascript
JavaScript数组操作详解
Feb 04 Javascript
react-router实现按需加载
May 09 Javascript
用JS编写一个函数,返回数组中重复出现过的元素(实例)
Sep 14 Javascript
Bootstrap 3多级下拉菜单实例
Nov 23 Javascript
js正则表达式校验指定字符串的方法
Jul 23 Javascript
Vue导出页面为PDF格式的实现思路
Jul 31 Javascript
JavaScript指定断点操作实例教程
Sep 18 Javascript
浅谈Vue服务端渲染框架Nuxt的那些事
Dec 21 Javascript
vue-cli3+typescript新建一个项目的思路分析
Aug 06 Javascript
javaScript 实现重复输出给定的字符串的常用方法小结
Feb 20 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
php中通过正则表达式下载内容中的远程图片的函数代码
2012/01/10 PHP
php json_encode值中大括号与花括号区别
2013/09/30 PHP
PHP实现mysqli批量执行多条语句的方法示例
2017/07/22 PHP
基于php编程规范(详解)
2017/08/17 PHP
jQuery 动画弹出窗体支持多种展现方式
2010/04/29 Javascript
jQuery实现用方向键控制层的上下左右移动
2013/01/13 Javascript
图片上传判断及预览脚本的效果实例
2013/08/07 Javascript
JQuery插件fancybox无法在弹出层使用左右键的解决办法
2013/12/25 Javascript
javascript实现单击和双击并存的方法
2014/12/13 Javascript
jQuery子属性过滤选择器用法分析
2015/02/10 Javascript
使用AngularJS创建单页应用的编程指引
2015/06/19 Javascript
完美解决浏览器跨域的几种方法(汇总)
2017/05/08 Javascript
修改 bootstrap table 默认detailRow样式的实例代码
2017/07/21 Javascript
ReactNative实现Toast的示例
2017/12/31 Javascript
vue中倒计时组件的实例代码
2018/07/06 Javascript
使用koa2创建web项目的方法步骤
2019/03/12 Javascript
[03:06]3分钟带你回顾DOTA2完美盛典&完美大师赛
2017/12/06 DOTA
[01:00:49]DOTA2-DPC中国联赛 正赛 Ehome vs iG BO3 第二场 1月31日
2021/03/11 DOTA
Python中__name__的使用实例
2015/04/14 Python
使用python编写简单的小程序编译成exe跑在win10上
2018/01/15 Python
python使用turtle库绘制树
2018/06/25 Python
Python使用分布式锁的代码演示示例
2018/07/30 Python
Python 中如何实现参数化测试的方法示例
2019/12/10 Python
Python任务调度利器之APScheduler详解
2020/04/02 Python
Python3创建Django项目的几种方法(3种)
2020/06/03 Python
基于opencv实现简单画板功能
2020/08/02 Python
美国唇部护理专家:Sara Happ
2019/06/19 全球购物
简历中个人求职的自我评价模板
2013/11/29 职场文书
四年大学生活的自我评价范文
2014/02/07 职场文书
《小动物过冬》教学反思
2014/04/17 职场文书
纪检监察建议书
2014/05/19 职场文书
2014年教育培训工作总结
2014/12/08 职场文书
试用期自我评价范文
2015/03/10 职场文书
立春观后感
2015/06/18 职场文书
css常用字体属性与背景属性介绍
2022/02/28 HTML / CSS
vue-cli3.x配置全局的scss的时候报错问题及解决
2022/04/30 Vue.js