在Node.js v 8.9.3上,扩展类上的方法Array.concat删除空值 - 为什么?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Node.js v 8.9.3上,扩展类上的方法Array.concat删除空值 - 为什么?相关的知识,希望对你有一定的参考价值。

我试图在没有改变Arrays类的情况下将Array的一些新功能添加到node.js中,避免了对其他模块的一些意外影响。

当我开始测试我的代码时,我发现了一些失败,我终于找到了原因。 concat方法在扩展后表现不同。

这对我来说很奇怪。这是预期的行为?

非常短的版本,看到问题:

class MyArray extends Array{};

/*
 * Test with values
 */
var sizeValueArray = new Array(4,4,4).concat([1,2,3]).length;
var sizeValueMyArray = new MyArray(4,4,4).concat([1,2,3]).length;
console.log( "size from concat values array = ", sizeValueArray );
console.log( "size from concat values my array = ", sizeValueMyArray );
if( sizeValueArray != sizeValueMyArray ) {
  console.log("this is strange");
} else {
  console.log("as expected.")
}

/*
 * Test with empty values
 */
var sizeEmptyArray = new Array(5).concat(new Array(6) ).length;
var sizeEmptyMyArray = new MyArray(5).concat(new MyArray(6) ).length;
console.log( "size from concat empty array = ", sizeEmptyArray);
console.log( "size from concat empty my array = ", sizeEmptyMyArray );
if( sizeEmptyMyArray != sizeEmptyArray ) {
  console.log("this is strange");
} else {
  console.log("as expected.")
}

您可以在浏览器中看到,这两个操作的结果是相同的。但不是在node.js中,你可以在这里看到https://repl.it/@thiagodamata/ArrayConcatStrangeBehaviorOnExtend

enter image description here

答案

看起来这个bug在最近的版本中得到了修复。你可以看到在这个repl工作。所以,这是一个已经修复的错误。

以上是关于在Node.js v 8.9.3上,扩展类上的方法Array.concat删除空值 - 为什么?的主要内容,如果未能解决你的问题,请参考以下文章

在 Elastic Beanstalk 上扩展 Nginx - Node JS

linux 下node.js 安装

为啥在 Spring Boot 中超类上的 @Bean 泛型创建方法比子类上的方法调用晚?

在 Controller 抽象类上添加方法

多台机器上的 Node.js tcp 套接字服务器

如何修复 Azure 功能:不兼容的 Node.js 版本 (v16.4.1)