//判断是不是对象
function isObject(data){
if(Object.prototype.toString.call(data) == '[object Object]'){
return true;
}else{
return false;
}
}
// 判断对象中是否存在某个值
function hasPrototype(Obj,key){
return new Promise((resolve, reject)=>{
if(Obj.hasOwnProperty(key)) resolve(true)
else reject(false)
})
}
/*
实例
let obj= {
a:'165',
name:"asdas"
}
hasPrototype(obj,"name1").then(res=>{
console.log(res)
}).catch(err=>{
console.log('没有某个属性走这里'+err)
})
*/
//判断对象是否为“{}”,长度为0
//为0 返回false,使用方法和上面类似
function objLength(obj){
// 方案1
return new Promise((resolve, reject)=>{
if(Object.getOwnPropertyNames(obj).length!=0) resolve(true)
else reject(false)
})
// 方案2
// return new Promise((resolve, reject)=>{
// if(Object.keys(obj).length!=0) resolve(true)
// else reject(false)
// })
}
// 拷贝
//0.1浅拷贝,新的改变影响旧的对象,旧的也跟着变
function assign(obj){
let newObj=Object.assign({}, obj);
return newObj;
}
//0.2(方法1)深拷贝,新的改变不影响旧的
function deepClone(obj){
let newObj = JSON.parse(JSON.stringify(obj));
return newObj;
}
//0.2(方法2) 深拷贝
function type (obj) {
let toString = Object.prototype.toString
let map = {
'[object Boolean]': 'boolean',
'[object Number]': 'number',
'[object String]': 'string',
'[object Function]': 'function',
'[object Array]': 'array',
'[object Date]': 'date',
'[object RegExp]': 'regExp',
'[object Undefined]': 'undefined',
'[object Null]': 'null',
'[object Object]': 'object'
}
return map[toString.call(obj)]
}
// 深拷贝
function cloneDeep (data) {
let t = type(data)
let o
let i
let ni
if (t === 'array') {
o = []
} else if (t === 'object') {
o = {}
} else {
return data
}
if (t === 'array') {
for (i = 0, ni = data.length; i < ni; i++) {
o.push(cloneDeep(data[i]))
}
return o
} else if (t === 'object') {
for (i in data) {
o[i] = cloneDeep(data[i])
}
return o
}
}
js对象常用封装
最新推荐文章于 2024-04-20 22:10:42 发布