javascript 中的字符串连接

String concaternation in javascript

我尝试构建一个 JSON 对象,该对象最终将保存到文件中。但是我发现如果我使用接近一个“元素+=元素”,它会抛出“无效的字符串长度”字符串。但是对于方法 2,我可以连接一个很长的字符串并保存一个文件。 (文件约为 50mb)。所以我想知道我的第一种方法有什么问题?

const person = {
    id: 1,
    name: "john"
}
personJson = JSON.stringify(person);
personJson = personJson + ',';

let element = personJson;
for (let index = 0; index < 500; index++) {
     element += element; 
}
let element = personJson;
for (let index = 0; index < 100000; index++) {
     element = element + personJson; 
}

在这两种方法中,您都会产生不同的结果,即 假设 personJson 包含字符串 "ab"

  1. element = element + element; 正在产生结果

    "ab" + "ab"
    
    "abab" + "abab"
    
    "abababab" + "abababab"
    

等等... 这就是字符串长度呈指数增长的原因。

  1. element = element + personJson;

    "ab" + "ab"
    
    "abab" + "ab"
    
    "abababab" + "ab"
    

等等... 这使您的字符串长度呈线性增长。

为了更好地理解,运行 下面的代码并查看结果:

const person = {
    id: 1,
    name: "john"
}
personJson = JSON.stringify(person);
personJson = personJson + ',';

let element = personJson;
for (let index = 0; index < 500; index++) {
     element += element;
     console.log(element.length); 
}

正如评论中所指出的,这可能不是编码 JSON 的最佳方式。

至于为什么会这样,是因为你的第一个循环实际上是每次迭代都将size乘以2,所以呈指数增长。它很快就达到了远高于第二个循环的大小,并最终超过了 javascript engine.

允许的字符串的最大大小
index = 0 ; length = 23
index = 1 ; length = 46
index = 2 ; length = 92
...
index = 24 ; length = 385875968
index = 25 ; length = 771751936

您可以创建一个对象数组,只要您想添加到数组中即可。喜欢:

const persons= [] ;
persons.push({id:1 , name: 'Shayan' });
persons.push({id:2 , name: 'john' });
...