对象的写法

对象

写法定义

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

    a是obj的key

    1是obj的key属性a的value

整个对象属性称为键值对

 

obj.a=10;

直接定义对象obj的属性a的值是10

 

对象内没有c值obj.c=20;的写法是

    现在给obj对象创建一个新属性c,并且设置这个新属性的值是20

[ ]写法

obj["c"]和obj.c是等同的,只不过obj.c是点语法的写法,而且点语法的属性是不加双引号,obj["a"]  key的写法,必须有双引号

为什么key的写法必须有双引号,在key这种写法时,要求属性名必须时字符型(或者symbol后面学)

 

在对象里没有属性时

如果对象上没有我们要打印或者定义的属性时,显示结果是undefined

写法案例解析

var obj={a:1,b:2,o:3};

var o="a";

 

console.log(obj[o]);

这里的o没有加双引号,因此是变量    1

 

console.log(obj["o"]);

3  这里获取了obj的o属性

 

console.log(obj.o);

使用点语法时不能使用变量,所以不需要加双引号,默认为是o属性 3

 

在[ ]中如果定义不是字符将隐式转换为字符

var n=9;

obj[n]=100;//如果变量的值不是字符,会隐式转换为字符,会将n的值转换为字符9设置为属性

 

var m=true;

obj[m]=10;//这里会将变量值不是字符串的隐式全部转为字符串

 

空值转换后将会变为undefined

var n;

var m;

 

obj[n]=10;

n的值是undefined,会自动隐式转换为字符串undefined

 

变量的值作为对象的属性名

console.log(obj[m]);

console.log(obj["undefined"]);

obj["undefined"]

console.log(n);

当使用对象[变量]  如果变量值不是字符型,

会隐式转换为字符型,并且将这个字符串作为该对象的属性名

 

任何对象强转为字符串后,都会变为"[object Object]"

对象是什么,存储在哪里

栈,堆

    栈的数据读取,写入速度快,但是存储的内容较少

    堆的读取和写入速度慢,但是存储的内容多

    字符型,数值型,布尔型,undefined存在栈中

    对象是存储在堆中

    栈中,一旦该变量不再使用时会被清理掉

当点击对象前面的箭头时,才去堆中对应的地址取出数据

引用地址就是指堆中对象存储的地址

 

对象的引用地址赋值

var o={a:1};

var o1=o;

将o对象的引用地址赋值给o1

 

o1.a=10;

因为o1和o是同一个对象,因此修改o1的属性就相当于修改了o的属性

 

重新改变新地址

var o={a:1};

        var o1=o;

        o={b:2};   重新改变新地址

        o.a=20;   在新的对象中添加属性

 

在对象改变地址或者从新定义后,原对象属性需要被回收,清理空间

 

obj=null;    //在原先对象属性中的引用地址中删除了obj的引用

 

当内存占用达到一定的时候,就会有一个垃圾回收车将所有堆中没有引用关系的对象回收掉

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值