以下摘取的函数,在 shared 目录下公用的工具方法。文件在 util.js 中,githu地址。
提取了一些常用通用的函数进行剖析,主要包含以下内容:
-
创建一个被冻结的空对象
-
判断是否是 undefined 或 null
-
判断是否不是 undefined 和 null
-
判断是否是原始类型
-
判断是否是对象类型
-
判断有效的数组下标
-
判断是否是一个 Promise 对象
-
删除数组中指定元素
-
用做缓存的高阶函数
-
递归判断一个对象是否和另个一个对象完全相同
-
函数只执行一次
-
自定义 bind 函数
-
创建一个被冻结的空对象
export const emptyObject = Object.freeze({})
一旦创建不能给这个对象添加任何属性。 -
判断是否是 undefined 或 null
function isUndef (v) {
return v === undefined || v === null
}
在源码中很多地方会判断一个值是否被定义,所以这里直接抽象成一个公共函数。
传入任意值,返回是一个布尔值。
判断是否不是 undefined 和 null
function isDef (v) {
return v !== undefined && v !== null
}
当传入的值,既不是 undefined 也不是 null 返回true。
-
判断是否是原始类型
function isPrimitive (value) {
return (
typeof value === ‘string’ ||
typeof value === ‘number’ ||
typeof value === ‘symbol’ ||
typeof value === ‘boolean’
)
}
在js中提供了两大类数据类型:
原始类型(基础类型):String、Number、Boolean、Null、Undefined、Symbol
对象类型:Object、Array、Function
5. 判断是否是对象类型
function isObject (obj: mixed) {
return obj !== null && typeof obj === 'object'
}
传入的值排除掉 null,因为在js中 null 使用运算符 typeof 得到的值是 object,这是一个 bug。因为历史原因放弃修复了。具体可以参考这里查看
-
判断有效的数组下标
function isValidArra