javaScript中的怎么去理解字符串?

课堂上老师说javaScript中的字符串一旦创建不可改变?要想改变,只能用另一个新字符串替换!

//第一次创建的变量 var str="8"; var str1=1; var str3=str+str1; console.log(str3); //81 //同样的变量改了一下内容 str="你好"; str1=3; str3=str+str1; console.log(str3); //你好3

这不是改变了变量里面的字符串内容了吗?
我有点蒙~~这不也是改变一个变量里面字符串的内容吗?为什么说不可改变?
求指点!

8个回答

几乎所有的语言的字符串都是如此设计,主要是考虑性能问题。字符串本质上是字符构成的数组,需要在内存中连续存储,当你追加内容的时候不能保证原始的内存有足够的内存存储超长的部分,所以字符串修改最简单直接的方法是重新开辟连续的内存,然后写入新的字符串。

这里说的字符串的只读,是指字符串对应的字符数组是只读的,不是字符串变量,你给字符串赋值,会产生一个新的内存存储字符数组(原来的回收),字符串变量指向这个新的地址。

var obj = {name: 'csdn'}; obj.name = '布莱克皮';console.log(obj.name)==>'布莱克皮' 此时你可以说obj是可以改变的,对象的里面东西变了,就说该对象被改变了
var str = "8"; str = "10" ;console.log(str)==>"10" 变量str(字符串)对应的值"8",被改变了么?显然没有。"8"怎么会被改变呢,你不可能在"8"本身上面去做手脚了,只能是把它替换,替换成你想要的"10"
我的理解,你对照着上面两个例子多想一想,希望对你有帮助

你每次修改字符串,系统都会重新分配空间给这个字符串,修改引用(指向新的字符串),在我们看来,字符串是可以修改的,但是在系统中是不可修改的

javascript是面向对象的语言。一切皆对象(比java还彻底),每一个字符串都是一个对象

“这不是改变了变量里面的字符串内容了吗?”
答:肉眼看起来是改变了字符串的内容,但是,此时的对象非彼时的对象了
”我有点蒙~~这不也是改变一个变量里面字符串的内容吗?为什么说不可改变?“
答:改变了后,已经是一个新的对象了(肉眼看不到区别)

可能你的老师是想说一但创建就不可释放吧,只要var出一个变量就会一直存在。

我觉得你老师的意思是:1、一个字面量是一个常量,一旦确定便不再改变。有字符串(String)字面量 。
2、JavaScript 使用关键字 var 来定义变量, 使用等号来为变量赋值。当申明创建时,便会在栈中开辟空间存储,多次对同一个变量进行赋值,那么就会被替代。我是这样理解的,不知道对不对。嘿嘿

JS是弱类型语言,会自动进行格式转换的

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问