Vue源码阅读分享---工具函数
来源:互联网 发布:2007数据透视表 编辑:程序博客网 时间:2024/04/29 19:51
Vue是优秀的前端MVVM框架,阅读源码对于理解框架以及提高js编程水平有极大的帮助,所以把自己阅读的源码分享给大家!
判断一个值是不是为空
function isUndef (v) { return v === undefined || v === null}
判断一个值是不是不为空
function isDef (v) { return v !== undefined && v !== null}
判断一个值真
function isTrue (v) { return v === true}
判断一个值假
function isFalse (v) { return v === false}
判断一个值是不是原始值
function isPrimitive (value) { return ( typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean' )}
快速类型检查,当我们知道value是json兼容类型时,用于判断原始值和对象
function isObject (obj) { return obj !== null && typeof obj === 'object' //因为typeof null为object,故先排除null}
严格类型,只有value为js对象时才返回true
var _toString = Object.prototype.toString;function isPlainObject (obj) { return _toString.call(obj) === '[object Object]'}
返回的函数使用了内部的数组map,是一个典型的闭包的应用
function makeMap(str,expectsLowerCase) { var map = Object.create(null); //创建一个空对象 var list = str.split(','); //分割字符串str for (var i = 0; i < list.length; i++) { map[list[i]] = true; //生成数组 } return expectsLowerCase //判断一个变量是否包含在传入字符串里 ? function (val) { return map[val.toLowerCase()]; } : function (val) { return map[val]; } }
删除数组的一个元素
function remove (arr, item) { if (arr.length) { var index = arr.indexOf(item); if (index > -1) { return arr.splice(index, 1) } }}
判断对象的自有属性
var hasOwnProperty = Object.prototype.hasOwnProperty;function hasOwn (obj, key) { return hasOwnProperty.call(obj, key)}
创建一个缓存函数
function cached (fn) { var cache = Object.create(null); //创建一个缓存对象 return (function cachedFn (str) { //返回一个缓存函数 var hit = cache[str]; //根据str获取缓存对象中的值 return hit || (cache[str] = fn(str)) //命中则返回缓存的函数,否则返回fn })}
首字母大写
var capitalize=cached(function(str){ //使用缓存函数提高效率 return str.charAt(0).toUpperCase()+str.slice(1)})console.log(capitalize('abc'))
连接一个camelCase字符串
var hyphenateRE=/([^-])([A-Z])/gvar hyphenate = cached(function(str){ return str // 这里要调用两次replace是因为,如果是 ABCD 这种包含三个连续大写字母的字符串, // 只replace一次会变成A-BC-D这样,需要再replace一次 .replace(hyphenateRE,'$1-$2') .replace(hyphenateRE,'$1-$2') .toLowerCase()})console.log(hyphenate('ABCD'))
判断一个字符串是否以$或者_开头
function isReserved(str){ var c = (str + '').charCodeAt(0); return c === 0x24 || c===0x5F}
定义一个属性
function def(obj, key, val, enumerable){ Object.defineProperty(obj, key, { value: val, enumerable: !!enumerable, writable: true, configurable: true })}
阅读全文
1 0
- Vue源码阅读分享---工具函数
- QUnit源码阅读(1):工具函数
- 一款源码阅读工具!!
- Linux_源码阅读工具
- java阅读源码工具
- 分享查看源码工具
- linux下源码阅读工具
- linux内核源码阅读工具
- Linux下阅读源码工具
- ubuntu下阅读源码工具
- linux源码在线阅读工具
- Linux下阅读源码工具
- 源码阅读之函数指针
- lua源码阅读(6)-函数
- vue 分享
- Vue源码分析——Vue的构造函数分解
- 阅读LINUX源码的方法及工具
- 源码阅读工具 lxr 安装配置初探
- Linux进程间通讯三--消息队列
- Windows下关于多线程类 CSemaphore,CMutex,CCriticalSection,CEvent,信号量CSemaphore的使用介绍
- 获得包围对象的凸包
- 下拉框应用
- jQuery文字逐行向上滚动代码
- Vue源码阅读分享---工具函数
- ansible之创建可复用playbook
- JS控制文本框只能输入数字和小数点
- 详述支付路由的设计方案
- Quartz与Spring集成 Job如何自动注入Spring容器托管的对象
- hdu2159(二维背包)
- Ubuntu环境下SS客户端的配置
- winform导出excel
- java向上转型和向下转型简述