Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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 为什么postMessage会折叠[undefined]的数组_Javascript_Arrays_Google Chrome_Web Worker - Fatal编程技术网

Javascript 为什么postMessage会折叠[undefined]的数组

Javascript 为什么postMessage会折叠[undefined]的数组,javascript,arrays,google-chrome,web-worker,Javascript,Arrays,Google Chrome,Web Worker,关于这个问题: 当一个包含未定义元素的数组被赋予Worker.prototype.postMessage时,到达的数组被弄乱了。它的长度保持不变,但不能再使用.map、.reduce、等进行迭代 下面的代码输出20。这是一个bug,还是某种预期行为?例如,如果传递的数组的部分值为[undefined,2]或[1,undefined],则会发生同样的情况 var response = "self.onmessage=function(msg){console.log(msg.data.length

关于这个问题:

当一个包含
未定义
元素的数组被赋予
Worker.prototype.postMessage
时,到达的数组被弄乱了。它的长度保持不变,但不能再使用
.map
.reduce
等进行迭代

下面的代码输出
20
。这是一个bug,还是某种预期行为?例如,如果传递的数组的部分值为
[undefined,2]
[1,undefined]
,则会发生同样的情况

var response = "self.onmessage=function(msg){console.log(msg.data.length, msg.data.reduce(function(i){return ++i;},0))}";

var blob = new Blob([response], {type: 'application/javascript'});
var worker = new Worker(URL.createObjectURL(blob))
worker.postMessage([undefined, undefined])

我建议您将worker函数定义为一个函数,然后将其转换为字符串。这使得代码更具可读性,请参见此处:另外,这个问题与相关问题有何不同。你能澄清一下吗?我可以确认这发生在谷歌浏览器上,而不是火狐浏览器上。如果您无法澄清您所问的问题中哪些是尚未询问的,则此问题应作为重复问题关闭。@TomášZato,相关问题定义了一个
新数组(2)
,该数组将折叠为实际的空数组
[]
。当我尝试删除
新数组(2)
并将其替换为
[未定义,未定义]
时,会发生这种情况。它会折叠成一个长度为2但没有标记的数组。我建议您将辅助函数定义为一个函数,然后将其转换为字符串。这使得代码更具可读性,请参见此处:另外,这个问题与相关问题有何不同。你能澄清一下吗?我可以确认这发生在谷歌浏览器上,而不是火狐浏览器上。如果您无法澄清您所问的问题中哪些是尚未询问的,则此问题应作为重复问题关闭。@TomášZato,相关问题定义了一个
新数组(2)
,该数组将折叠为实际的空数组
[]
。当我尝试删除
新数组(2)
并将其替换为
[未定义,未定义]
时发生了这种情况。它被折叠成一个长度为2的数组,但没有标记。