美文网首页
回顾对象

回顾对象

作者: hellowade | 来源:发表于2017-08-31 10:03 被阅读0次

    对象:一种无序的数据集合,由若干个“键值对”(key-value)构成。

    开门见山,不想说话直接抛出一道经典题,复习下js中的引用类型

    var o1 = {};
    var o2 = o1;
    o1.a = 1;
    o2.a  //输出结果为1
    
    var o1 = {};
    var o2 = o1;
    o1 = 1;
    o2 // 输出结果为{}
    

    分析:例一中,o1和o2均为引用类型,指向同一个内存地址,为其中任何一个变量添加属性,另一个变量都可以读写该属性。
    例二中,o1和o2均为引用类型,指向同一个内存地址,之后对o1赋值,o1为基本类型,值为1,o2为引用类型。


    继续复习对象

    Object.keys可以查看一个对象本身的所有属性(key值),返回数组。
    var obj = {
      a:1,
      b:2
    }
    Object.keys(obj) //["a","b"]
    Object.keys(obj).length// 2,可计算对象key-value的对数
    
    hasOwnProperty() 方法会返回一个布尔值,指示对象是否具有指定的属性作为自身(不继承)属性。
    var obj = {
        a:1,
        b:2
    }
    obj.hasOwnProperty('a')   //输出结果为true
    // obj.hasOwnProperty('c')  输出结果为false
    
    delete命令用于删除对象的属性,删除成功后返回true。
    var obj = {a:1}
    Object.keys(obj) //["a"]
    delete obj.a //true
    obj.a //undefined
    Object.keys(obj) // []
    
    for...in循环用来遍历一个对象的全部属性。
    var obj = {
      a:1,
      b:2
    }
    for (var i in obj){
    console.log(i)  // a,b
    } 
    

    常见面试题之浅拷贝、深拷贝

    拷贝的定义就是复制,怎么复制对象么,利用给对象添加key、value值的方式。

    var a = {}
    a.b = 1
    console.log(a)
    

    好,方法已经确定,那我们就新建一个空对象,遍历添加就好。

    var oldObj = {
        a:1,
        b:2
    }
    function shallowCopy(oldObj){
        var newObj = {}
        for(var key in oldObj){
            if(oldObj.hasOwnProperty(key)){
              newObj[key] = oldObj[key]            
            }
        }
        return newObj
    }
    shallowCopy(oldObj)  //{a:1, b:2}
    

    结果出来,符合预期。但好像有点不对,万一oldObj中存在值为对象,结果还会一样么,控制台输入试一下,无效.....结果的办法就是将对象的值再进行拷贝,递归

        function deepCopy(oldObj) {
            var newObj = {};
            for(var key in oldObj) {
                if(typeof oldObj[key] === 'object' & typeof oldObj[key] != null) {
                    newObj[key] = deepCopy(oldObj[key]);
                }else{
                    newObj[key] = oldObj[key];
                }
            }
            return newObj;
        }
    

    常见面试题
    将数组中的值遍历,记录出现的次数

    function count(arr) {
        var count = {}
        for(var i = 0; i<arr.length; i++){
            if(count[arr[i]]){
              count[arr[i]]++  
            }else{
                count[arr[i]] = 1
            }
        }
        console.log(count)
    }
    count([1, 2, 4, 4, 3, 4, 3])  //{1: 1, 2: 1, 3: 2, 4: 3}
    

    相关文章

      网友评论

          本文标题:回顾对象

          本文链接:https://www.haomeiwen.com/subject/kfefjxtx.html