js字符串拼接

var str = "hello ";
str = str + "world";

上述方法的内存过程:
1、为a分配栈内存
2、创建堆内存存入字符串"hello",并将堆地址赋值到a的栈内。
3、创建堆内存存入字符串"world"。
4、创建存储结果的堆内存。
5、把str的值复制到结果中。
6、把"world"复制到结果中。
7、更新str的值,使它指向结果。
每次完成字符串连接都会执行步骤 3 到 6,使得这种操作非常消耗资源。
如果重复这一过程几百次,甚至几千次,就会造成性能问题。

解决方法是
用 Array 对象存储字符串,然后用 join() 方法生成结果

var arr = new Array();
arr[0] = "hello ";
arr[1] = "world";
var str = arr.join("");

//性能更优
var buffer = new StringBuffer ();
buffer.append("hello ");
buffer.append("world");
var result = buffer.toString();

注:字符串数据被存储到堆,然后把字符串的引用地址存储在字符串变量中。同时为了避免错误操作,js解释器强制约定字符串在堆存储的数据是不可变的。相当于设置字符串在堆区存储的数据是只读的。

猜你喜欢

转载自www.cnblogs.com/amulong1237/p/12369020.html
今日推荐