JS变量,值类型

变量申请:

申请多个单一变量:

尽量不要像下面这样申请:

命名规则:

变量名字必须要以英文字母,下划线,$开头

变量名可以包括英文字母,下划线,$,数字

不可以用系统的关键字(现在使用的系统的有特殊含义的词),保留字(未来也许系统使用的关键字)用做变量名

 

值类型:首先先将值分为原始值和引用值

原始值:

Number String Boolean undefined null

引用值:

array Object function .....date  RegExp

看一下下面的js代码:

b的值是多少呢?10  没错

那么再看下面的

那么现在你再来看arr1多少呢?1?

不对 是1,2

造成这样的原因是由于原始值和引用值储存的方式不一样

原始值存储的方式用的栈(先进后出),栈内存的赋值方式是复制

先看a,b;

var a = 10;

var b;

现在在赋值b时,首先是a的10拷贝一份,然后再给b

那么,再次改变a的值时候,就和b没什么关系了

接下来引用值,他的存储方式是栈加堆

首先

var arr,arr1;

然后

arr = [1];

系统发现存的数组,然后就将数组的内容存储到堆里面

 

然后arr里面存的是数组内容的地址

然后再将arr赋值给arr1 ,

arr1 = arr;

现在在arr中增加内容

arr.push(2);

这个时候再输出arr1   ,去到1000的地址中找内容,就会变成[1,2]了,原因是arr,和arr1共同指向1000地址的内容

document.write(arr1);

接下来看下一段代码:

这样你觉得arr1应该是多少呢?1,2,3?   不对,是1,2

这是因为刚才用的push把2存进去了,现在使用的是:

arr = [1,3];

这样会重新找一个地址

再将一下,刚才的内存机制,原始值其实是叫不可改变的原始值,刚才那样写其实是不对的(我们直接改变了里面的内容)

其实是这样的,在你重新给原始值赋一个新值的时候,他并不是直接改变其原来的内容,他只是将原来内容的地址变回去,然后再在新的地方重新申请一个空间,然后再将新值存储进去

赋值完最开始是这样的:

然后改变a的值,

就会变成这样,那原来的地址怎么办呢,就和我们u盘删东西是一样的原理,

一般来说我们删东西其实并没有删除,它还存在于内存中,只是他的地址我们找不到了(但是有些相关工具可以找到,所以不要轻易丢弃u盘之类的存储工具),然后随着我们存储的东西越来越多,内存会有满的一天,然后你会删东西,再次存储东西的时候,会将上次地址块的内容重新填写,这个时候才是真正的删除了。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值