首頁  >  文章  >  後端開發  >  javascript - 請問堆疊中的資料可以修改嗎?例如數值資料可以修改嗎?

javascript - 請問堆疊中的資料可以修改嗎?例如數值資料可以修改嗎?

WBOY
WBOY原創
2016-08-23 09:17:491351瀏覽

<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