为了账号安全,请及时绑定邮箱和手机立即绑定

请问栈中的数据可以修改吗?比如数值数据可以修改吗?

请问栈中的数据可以修改吗?比如数值数据可以修改吗?

弑天下 2018-09-04 09:09:06
var str = "abc";str[0]; // "a"str[0] = "d";str; //仍然是"abc"字符串是immutable所以不能修改那么请问栈中的数据可以修改吗?比如 num=10;num=11;更改的是栈中的数值10改为11,还是在栈中新建了一个num=11,将原来的内存删除呢?
查看完整描述

1 回答

?
临摹微笑

TA贡献1982条经验 获得超2个赞

我的理解是

var str = "abc";//创建了一个js中原始值string类型,而原始值是不可变的

str[0] = "d";//这句是典型的引用对象属性的语法,我们可以这样理解,str实际上是不可变的,但是你这样

书写,会造成  strTemp = new String(str);被创建,也就是临时对象创建,并且赋值strTemp[0] = "d";

之后立即销毁。

也就是你要记住一点,js中原始值是不可变的。

对象是可变的。

这么说吧,我用字符串举例:

var str = "Hello";//"Hello"是一个字面量,原始值(Primitive Type),我是这样理解的,有一块内存存储"Hello",str是一个变量名而已,用来引用这块内存,使用它。


var str = "World";//这一句实际上只是改变了引用的位置,因为原始值是不变的,然后假如上面的"Hello",不用的话js的自动垃圾处理回回收的。


查看完整回答
反对 回复 2018-09-30
  • 1 回答
  • 0 关注
  • 1023 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信