• javascript中的对象浅谈


    1.对象的表现形式

     var obj={
                a:1,
                b:2,
                   }

    如上,obj就是对象。 以键值对(key:value)的形式出现

    2.对象的特点

            var s="h";
            var s1=10;
            var obj={
                a:1,
                b:2,
                c:s1,
                [s]:3
                };

    如上:    1.键(key) 是字符串

         2.key可以是变量,但是必须放在[]里面,像上面的[s]:3,实际代表的是h:3

        3.value可以是字符串,数值,变量,函数.....

    3.对象的赋值方法

    var obj={};
        obj.a=10;
      
    obj["a"]=10; 二者相同

    var s="a";
       obj[s]=10; 和上面的相同;

    总结:对象的赋值方法有两种:   1)字符串赋值,变量赋值

    !设置属性时,会隐形的转换为字符串。

            var obj={};
            var s=1;
            obj[s]=10;
         
            console.log(obj[s]);
            console.log(obj["1"]);
            console.log(obj["1"]);           结果:   10    10    10     可以看到,数值1,转换成了字符串,是obj的属性                 

    感觉很抽象,再来个例子

            var obj={};
            var o={a:1};
            var o1={a:2};
            obj[o]=10;
            console.log(obj);
            console.log(obj[o]);
            console.log(obj[o1]);              结果: {[object Object]: 10}     10        10   
                 

    解释下为什么: 前面的数据类型那章介绍过,对象的类型是[object Object ]  ,所以obj[o] 的键是[object Object ] 。  obj[o] 和obj[o1]  的键是一样的,(只要[] 里放的是对象,那么键都是一样的),所以value都是10.

    有不懂得话,在举个例子

            var obj={};
            var arr=[1,2,3];
            var arr1=[];
            obj[arr]=10;
            console.log(obj[arr1])     结果: undefined

    解释:数组转换成字符串是"1,2,3",所以obj[arr]=10实际上是 obj["1,2,3"]=10;    而arr1是空数组,没有赋值,所以打印结果是undefined

    4.对象的遍历

    遍历分为可枚举属性,和不可枚举属性,这里我只说可以枚举属性的遍历。

    对象的可枚举属性的遍历使用for   in  语句

           var obj={a:1,b:2,c:3,d:undefined};
            for (var prop in obj){
                console.log(prop,obj[prop])
            }                                   结果是:   a  1    b  2    c    3

    prop是对象的key,obj[prop] 是对象的value

    说一下判断对象中有无此属性:

     console.log("d" in obj)     结果是:    true   

    5.对象中属性的删除

    var obj={a:1,b:2,c:3,d:undefined,e:{f:5,g:6}};
     delete obj.a;
     console.log(obj);

    直接使用delete只能删除单层的结构,如果是多层:

    var obj={a:1,b:2,c:3,d:undefined,e:{f:5,g:6}};    
     obj.e=null;
     delete obj.e;
     console.log(obj);

    对于多层的话,必须设置null,否则会造成内存泄漏

    关于堆栈存储,内存泄漏,垃圾清理  我会在后面单独拿出来写。

    6.对象的复制

    1)浅复制

     var obj={a:1,b:2,c:3,d:undefined,e:{a:1,b:2}};
            var obj1={};
            for(var prop in obj){
                obj1[prop]=obj[prop];
            }

    缺点:e的地址还是一样,改变一个,另外一个中的e也会改变,适用于单层的对象结构

    2)浅复制

    var o={a:1,b:2,c:3};
    var o1={c:5,d:10,e:20};
    var obj=Object.assign({},o,o1);
    console.log(obj);

    适用于多个对象复制到一个对象里面。

    3)深复制

     var obj={a:1,b:2,c:3,d:undefined,e:{a:1,b:2}};
     var obj1={};
     var obj1=JSON.parse(JSON.stringify(obj));
    console.log(obj1)

    这里使用了JSON字符串,只适用于单层的对象结构,多层的深度遍历,复制我会单独写

  • 相关阅读:
    java 字节流与字符流的区别
    什么是缓冲区
    java流输入输出
    Apache安装配置
    Maven学习
    Redis
    数据结构与算法
    pig ERROR 2997: Encountered IOException. File or directory null does not exist.
    hadoop学习路线(转)
    86标准SQL与92标准SQL用法区别
  • 原文地址:https://www.cnblogs.com/94-Lucky/p/13173152.html
Copyright © 2020-2023  润新知