Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/464.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JSON字符串化将47字节的JSON字符串转换为340mb?_Javascript_Json - Fatal编程技术网

Javascript JSON字符串化将47字节的JSON字符串转换为340mb?

Javascript JSON字符串化将47字节的JSON字符串转换为340mb?,javascript,json,Javascript,Json,有什么想法吗?var-keys=[7925181,“68113227”]; temp.forEach(function(entry) { alert(temp); }); var VAL={“7925181”:[“68113227”],“68113227”:[“7925181”]}; var temp={};// @zerkms是对的。但我也想指出为什么会发生这种情况 var keys = [7925181,"68113227"]; var vals = {"7925181":["68

有什么想法吗?

var-keys=[7925181,“68113227”];
temp.forEach(function(entry) {
    alert(temp);
});
var VAL={“7925181”:[“68113227”],“68113227”:[“7925181”]};
var temp={};// @zerkms是对的。但我也想指出为什么会发生这种情况

var keys = [7925181,"68113227"];
var vals = {"7925181":["68113227"],"68113227":["7925181"]};

var temp = {}; //  <--- !!!
for (var i = 0; i < keys.length; i++) {
    temp[keys[i]] = vals[keys[i]];
}
//alert(JSON.stringify(vals).length);
alert(JSON.stringify(temp).length);
如您所见,它创建了9个未定义的值。我用nodejs运行了上面的代码,所以没有显示空值

如果我使用JSON.stringfy(),那么您将看到:

> var temp = [];
> temp[10] = 'test';
> temp 
[ , , , , , , , , , , 'test' ]

temp.length
将是68113227…@Passerby length总是至少比最高索引高一个,因此681132271+1=68113228。“使用一些垃圾初始化所有间隙”-
JSON.stringify()
将未定义的数组元素转换为
null
,因此输出将是
[null,null,null,null,etc.]
我不会猜到的。也就是说,令人惊讶的是,当您执行
JSON.stringify()
时,它才开始需要时间。(不带JSON.stringify
)需要0秒。使用它()需要39.5秒。我想这只是一个解释器技巧-除非实际需要,否则不要初始化数组。@neubert当您将数组文本指定给
temp
时,数组将被初始化。最终得到的数组只有两个成员,但长度总是设置为最高索引加一,因此长度为
68113228
。JSON没有省略,所以它为未定义的成员设置了
null
。它们不是对象,而是未定义的。更改为null引用。它们也不是null引用:-S(抱歉,太无聊了)Hmmm我想它们是。空值,引用。全部保存为javascript中的指针?否?请记住,在JS中,
undefined
null
之间存在差异。但是
JSON.stringify()
为未定义的数组元素输出
null
,可能是因为JSON没有“未定义”的概念。
> var temp = [];
> temp[10] = 'test';
> temp 
[ , , , , , , , , , , 'test' ]
> JSON.stringify(temp)
'[null,null,null,null,null,null,null,null,null,null,"test"]'