Javascript 如何将空数组显示为未定义而不是空数组
在我学习JavaScript时,我一直在尝试使用Javascript 如何将空数组显示为未定义而不是空数组,javascript,arrays,Javascript,Arrays,在我学习JavaScript时,我一直在尝试使用const关键字。我意识到我可以将项目添加到对象或数组 对于数组,当我添加到一个不在末尾后面的索引时,我会得到空项。当我记录其中一个值时,会显示未定义。如何使日志显示显示为显示未定义 const arr=[0,1]; log('Expect:[0,1]Result=',arr); arr[1]=“a”; log('Expect:[0,\'a\']Result=',arr); arr[2]=‘c’; log('Expect:[0,\'a\',\'c
const
关键字。我意识到我可以将项目添加到对象
或数组
对于数组,当我添加到一个不在末尾后面的索引时,我会得到空项。当我记录其中一个值时,会显示未定义
。如何使日志显示显示为显示未定义
const arr=[0,1];
log('Expect:[0,1]Result=',arr);
arr[1]=“a”;
log('Expect:[0,\'a\']Result=',arr);
arr[2]=‘c’;
log('Expect:[0,\'a\',\'c\']Result=',arr);
arr[8]=3;
控制台日志(arr);
log('Expect:[0,\'a\',3]Result=',arr);
console.log(arr[7])代码>此行为的原因是节点对孔
和未定义
元素的处理方式不同:
在节点中尝试以下操作:
让a=[]
a[0]=未定义
a[4]=“foo”
控制台日志(a)
//您将看到:[未定义,'foo']
Node的V8引擎的创建者都知道这样做的原因,我相信他们有很好的理由。但是,如果确实希望看到所有数组中节点为空的未定义位置,则可以向数组对象引入一个新函数,如下所示:
Array.prototype.toPrettyString=function(){
for(设i=0;i
然而,这也有它自己的陷阱,你应该阅读这个答案:如果你决定走这条路
其他详细信息
不同浏览器和节点的行为会有所不同,因为它们各自实现了自己的JavaScript解释器(chrome&node使用v8,但由于节点设计为服务器端语言,chrome设计为客户端,因此显然存在差异)
作为补充,这种行为在野外很少遇到,因为大多数生产级js实际上不会在阵列中留下漏洞。要了解为什么依赖这一点是危险的:
设a=[];
a[0]=未定义;
a[4]=“foo”;
让计数=0;
对于a的(i){count++}
console.log(计数)
//你会看到5
计数=0;
a、 forEach(a=>count+=1)
console.log(计数)
//你会看到2。不是5!
即,的语义。。当谈到孔时,of
与forEach
不同 您可以使用fill:arr.fill(未定义,3,8)@PeterSeliger为什么此脚本中的任何内容在节点中提供与在浏览器中不同的控制台输出?您可以使用扩展语法,如x=['a','b','c',,];y=[…x];console.log(y)
将返回[“a”、“b”、“c”,未定义、未定义、未定义]
节点不一定将空项
视为未定义
,因此我认为最好的办法是将所有项替换为未定义项。空项被视为不存在,这就是如果map()
在数组上,它跳过空项,而不跳过未定义项。