js对象常用封装

//判断是不是对象
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
    }
  }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值