首页  >  文章  >  后端开发  >  javascript - 请问栈中的数据可以修改吗?比如数值数据可以修改吗?

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

WBOY
WBOY原创
2016-08-23 09:17:491389浏览

<code>var str = "abc";
str[0]; // "a"
str[0] = "d";
str; //仍然是"abc"</code>

字符串是immutable所以不能修改

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

回复内容:

<code>var str = "abc";
str[0]; // "a"
str[0] = "d";
str; //仍然是"abc"</code>

字符串是immutable所以不能修改

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

我的理解是

<code>var str = "abc";//创建了一个js中原始值string类型,而原始值是不可变的
str[0] = "d";//这句是典型的引用对象属性的语法,我们可以这样理解,str实际上是不可变的,但是你这样
书写,会造成  strTemp = new String(str);被创建,也就是临时对象创建,并且赋值strTemp[0] = "d";
之后立即销毁。
也就是你要记住一点,js中原始值是不可变的。
对象是可变的。</code>
<code>这么说吧,我用字符串举例:
var str = "Hello";//"Hello"是一个字面量,原始值(Primitive Type),我是这样理解的,有一块内存存储"Hello",str是一个变量名而已,用来引用这块内存,使用它。

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

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

共同进步。

Script 的字符串是不可变的(immutable).

  1. str[0] = "d";中的指针[0]可以读取它的值。

补充:

<code>String 类定义的方法都不能改变字符串的内容。像 String.toUpperCase() 这样的方法,返回的是全新的字符串,而不是修改原始字符串。</code>

建议:

<code>以上信息来 http://www.w3school.com.cn/jsref/jsref_obj_string.asp
遇到你感觉比较基础的问题,多查文档。
</code>

加油!

应该是新创建的
javascript - 请问栈中的数据可以修改吗?比如数值数据可以修改吗?

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

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

里面有一个隐士转换

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

变量(值)→内存
在数值和布尔变量中,(值)为数值
在字符串和对象,数组等中,(值)为地址指向内存.比较时比较的是(值).
将变量重新赋值时就是更改(值),将变量赋值给另一个变量就是将(值)传递[复制]给另一个变量.

图中
n=10;n=11;n不变,更改的是(值).
b=n;值传递,n不变,b=10.
str="aa";str="bb";str不变,(值)更改指向另一个字符串.
str2="aa",str2不同于str,指向的不是原本的"aa"而是新的"aa".
str3=str2;str3的(值)与str2相同,指向同一个字符串,等价.

字符串是按引用复制和传递的,按值来比较
Numbers 和 Boolean 类型的值 (true 和 false) 是按值来复制、传递和比较
对象、数组以及函数是按引用来复制、传递和比较的

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn