javascript - 请问栈中的数据可以修改吗?比如数值数据可以修改吗?
大家讲道理
大家讲道理 2017-04-11 12:17:11
[JavaScript讨论组]
var str = "abc";
str[0]; // "a"
str[0] = "d";
str; //仍然是"abc"

字符串是immutable所以不能修改

那么请问栈中的数据可以修改吗?
比如 num=10;num=11;
更改的是栈中的数值10改为11,
还是在栈中新建了一个num=11,将原来的内存删除呢?

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回复(4)
大家讲道理

我的理解是

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的自动垃圾处理回回收的。

如果还是不明白,我就放大招了------>js原始值的秘密

共同进步。

PHPz

内存分布,有堆,有栈,还有常量池。堆的空间,比栈大,堆里面一般放的是 对象 函数之类的。栈里面放声明的变量,常量池一般放些常规的字符,数。所以我补充的一点是,有些东西存放的位置跟你说的不一样。

PHP中文网

javascript中的string类型是借鉴于Java中的string类型,一旦string的字面量被声明,就不可更改

巴扎黑

里面有一个隐士转换

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号