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 相关文章推荐
Extjs TimeField 显示正常时间格式的代码
Jun 28 Javascript
自己动手制作jquery插件之自动添加删除行的实现
Oct 13 Javascript
web的各种前端打印方法之jquery打印插件jqprint实现网页打印
Jan 09 Javascript
JS判断对象是否存在的10种方法总结
Dec 23 Javascript
JavaScript String 对象常用方法详解
May 13 Javascript
js动态添加的DIV中的onclick事件简单实例
Jul 25 Javascript
基于JavaScript实现树形下拉框
Aug 10 Javascript
AngularJs IE Compatibility 兼容老版本IE
Sep 01 Javascript
javascript作用域链与执行环境详解
Mar 25 Javascript
vue2.0 自定义日期时间过滤器
Jun 07 Javascript
AngularJS 购物车全选/取消全选功能的实现方法
Aug 14 Javascript
使用javascript做在线算法编程
May 25 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
Ajax+PHP 边学边练 之二 实例
2009/11/24 PHP
php批量更改数据库表前缀实现方法
2013/10/26 PHP
javascript HTMLEncode HTMLDecode的完整实例(兼容ie和火狐)
2009/06/02 Javascript
jquery等待效果示例
2014/05/01 Javascript
javascript如何实现暂停功能
2015/11/06 Javascript
javascript原型继承工作原理和实例详解
2016/04/07 Javascript
jQuery中事件与动画的总结分享
2016/05/24 Javascript
js编写一个简单的产品放大效果代码
2016/06/27 Javascript
关于原生js中bind函数的简单实现
2016/08/10 Javascript
详解nodeJS之路径PATH模块
2017/05/31 NodeJs
本地存储localStorage用法详解
2017/07/31 Javascript
Angular使用 ng-img-max 调整浏览器中的图片的示例代码
2017/08/17 Javascript
微信小程序多音频播放进度条问题
2018/08/28 Javascript
Vue SPA 初次进入加载动画实现代码
2019/11/14 Javascript
一篇文章带你从零快速上手Rollup
2020/09/07 Javascript
[02:44]DOTA2英雄基础教程 克林克兹
2014/01/15 DOTA
Flask入门教程实例:搭建一个静态博客
2015/03/27 Python
Python序列化基础知识(json/pickle)
2017/10/19 Python
Python深度优先算法生成迷宫
2018/01/22 Python
Pycharm 创建 Django admin 用户名和密码的实例
2018/05/30 Python
python操作excel的包(openpyxl、xlsxwriter)
2018/06/11 Python
在python中使用with打开多个文件的方法
2019/01/07 Python
Python多进程入门、分布式进程数据共享实例详解
2019/06/03 Python
使用 PyTorch 实现 MLP 并在 MNIST 数据集上验证方式
2020/01/08 Python
html2canvas生成清晰的图片实现打印的示例代码
2019/09/30 HTML / CSS
英国领先的游戏零售商:GAME
2019/09/24 全球购物
ECOSUSI官网:女式皮革背包
2019/09/27 全球购物
幼儿园托班开学寄语
2014/01/18 职场文书
医药学专业大学生职业生涯规划书论文
2014/01/21 职场文书
文明美德伴我成长演讲稿
2014/05/12 职场文书
中职生求职信
2014/07/01 职场文书
《微笑着面对生活》优秀演讲稿范文
2014/09/23 职场文书
高中物理教学反思
2016/02/19 职场文书
4种非常实用的python内置数据结构
2021/04/28 Python
python爬虫之selenium库的安装及使用教程
2021/05/23 Python
springboot集成redis存对象乱码的问题及解决
2022/06/16 Java/Android