js常用工具函数
常用工具函数
-
数组判断
-
const isArray = (arg) => { return Array.isArray(arg) }
-
const isArray = (arg) => { return Object.prototype.toString.call(arg) === '[object Array]' }
-
const isArray = (arg) => { delete Array.prototype.toString return arg.toString() === '[object Array]' }
-
-
对象判断
-
const isObject = (arg) => { return Object.prototype.toString.call(arg) === '[object Object]' }
-
const isObject = (arg) => { return typeof arg === 'object' && arg.constructor === Object }
-
-
深拷贝
-
const deepClone = (arg) => { if (isObject(arg)) { let newArg = {} let keys = Object.keys(arg) for (let i = 0; i < keys.length; i++) { let k = keys[i] let v = arg[k] let v1 = deepClone(v) newArg[k] = v1 } return newArg } else if (isArray(arg)) { let newArg = [] for (let i = 0; i < arg.length; i++) { let v = arg[i] let v1 = deepClone(v) newArg.push(v1) } return newArg } else { return arg } }
-
const deepClone = (c, p) => { let c = c || {} for (let k in p) { if (typeof p[k] === 'object') { c[k] = p[k].constructor === Array ? [] : {} deepClone(c[k], p[k]) } else { c[k] = p[k] } } return c }
-
-
对象删除
-
const removeProperty = (target,propertyToRemove) => { const {[propertyToRemove]: _, ...newTarget} = target return newTarget }
-
-
判断是否相等
-
const equals = (m, n) => { if (isArray(m) && isArray(n)) { if (m.length !== n.length) { return false } for (let i = 0; i < m.length; i++) { let mVal = m[i] let nVal = n[i] if (!equals(mVal, nVal)) { return false } } return true } else if (isObject(m) && isObject(n)) { let mkeys = Object.keys(m) let nkeys = Object.keys(n) if (mkeys !== nkeys) { return false } for (let i = 0; i < mkeys.length; i++) { let km = mkeys[i] let kn = nkeys[i] let mVal = m[km] let nVal = n[kn] if (km !== kn) { return false } if (!equals(mVal, nVal)) { return false } } return true } else { return m === n } }
-
-
判断对象和数组可以使用Object的原型方法toString, 对于对象来说 Object.prototype.toString().call(arg) === arg.toString(), 对于数组和函数来说,作为Object的原型都重写了toString方法,可通过delete删除重写的toString,在使用toString方法
-
toString: 每个对象都有一个 toString() 方法,当该对象被表示为一个文本值时,或者一个对象以预期的字符串方式引用时自动调用。默认情况下,toString() 方法被每个 Object 对象继承。如果此方法在自定义对象中未被覆盖,toString() 返回 "[object type]",其中 type 是对象的类型。