javascript中的字符串连接

javascript中的字符串连接,javascript,string,concatenation,string-concatenation,Javascript,String,Concatenation,String Concatenation,我尝试构建一个JSON对象,最终将其保存到一个文件中。但我发现,如果我使用一个“element+=element”,它将抛出“Invalid string length”字符串。但是对于方法2,我可以压缩一个很长的字符串并保存一个文件。(文件大小约为50mb)。所以我想知道我的第一种方法有什么问题 const person = { id: 1, name: "john" } personJson = JSON.stringify(person); person

我尝试构建一个JSON对象,最终将其保存到一个文件中。但我发现,如果我使用一个“element+=element”,它将抛出“Invalid string length”字符串。但是对于方法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; 
}
const person={
id:1,
姓名:“约翰”
}
personJson=JSON.stringify(person);
personJson=personJson+',';
让element=personJson;
对于(让索引=0;索引<500;索引++){
元素+=元素;
}
let元素=personJson;
对于(让索引=0;索引<100000;索引++){
element=element+personJson;
}

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

  • 元素=元素+元素正在生成结果

    "ab" + "ab"
    
    "abab" + "abab"
    
    "abababab" + "abababab"
    
  • 等等。。。 这就是为什么字符串长度呈指数增长

  • element=element+personJson

    "ab" + "ab"
    
    "abab" + "ab"
    
    "abababab" + "ab"
    
  • 等等。。。 这会使你的线长度线性增长

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

    const person={
    id:1,
    姓名:“约翰”
    }
    personJson=JSON.stringify(person);
    personJson=personJson+',';
    让element=personJson;
    对于(让索引=0;索引<500;索引++){
    元素+=元素;
    console.log(元素长度);
    
    }
    正如评论中指出的,这可能不是编码JSON的最佳方式

    关于它发生的原因,这是因为您的第一个循环实际上是每次迭代将大小乘以2,所以它呈指数增长。它的大小很快就超过了第二个循环,最终超过了用户允许的最大字符串大小


    您可以创建任意数量的对象数组,以添加到数组中。比如:

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

    没有JSON对象这样的东西。JSON总是一个字符串。不要自己尝试编码JSON<代码>JSON.stringify([person1,person2,person3])
    将正常工作,因为js中没有对象或数组是引用类型,所以它使用堆内存。如果我将100000个对象添加到一个数组中,那么反序列化为JSON会显著增加内存使用量吗?或者,我序列化了一个对象并将其关联1000次(cos string在js中是premetive类型,使用更少的内存),然后保存到一个使用更少内存的文件中?
    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' });
    ...