码迷,mamicode.com
首页 > 编程语言 > 详细

javascript中的对象浅谈

时间:2020-06-21 17:35:02      阅读:51      评论:0      收藏:0      [点我收藏+]

标签:适用于   sign   key   否则   解释   undefined   内存泄漏   对象   深复制   

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字符串,只适用于单层的对象结构,多层的深度遍历,复制我会单独写

javascript中的对象浅谈

标签:适用于   sign   key   否则   解释   undefined   内存泄漏   对象   深复制   

原文地址:https://www.cnblogs.com/94-Lucky/p/13173152.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!