Javascript - 数组是对象类型,在声明数组后直接在 .push 处失败

Posted

技术标签:

【中文标题】Javascript - 数组是对象类型,在声明数组后直接在 .push 处失败【英文标题】:Javascript - Array is of type object and failing at .push directly after declaration of array 【发布时间】:2021-09-17 10:36:16 【问题描述】:
const audio = connection.receiver.createStream(message,  mode: 'pcm', end: 'manual' );    
var testingArr = new Array();
    audio.on('data', (data) => 
      console.log(Array.isArray(testingArr)); //output: false
      testingArr.push(data);
    );

这里的正文显示 testingArr 不是数组类型 这是怎么回事?

我希望在几秒钟内将新数据添加到数组中,以便我可以将其解密为文本字符串。

我也试过 var testingArr = [],遇到同样的问题

我尝试运行此脚本时遇到的错误:

TypeError: testingArr.push is not a function
    at Decoder.<anonymous>

【问题讨论】:

您的代码看起来不错。你需要知道typeof 并不总是告诉你你想知道什么。您还需要知道,如果它不是一个标量值(字符串、数字、布尔值、null、符号),那么该项目就是一个对象——JS 中的一切都是一个对象,甚至函数和数组也是如此。以下表达式始终为真:typeof [] === 'object'。你可以使用Array.isArray(testingArr) 来检查某个东西是否真的是一个数组。 @Absent mindInsanity 该代码应该可以工作。代码中没有任何部分分配给testingArrtestingArr = ...)吗? 检查您是否在以后以某种方式更改了testingArr。使用const 而不是var 啊,我是个傻瓜。在脚本的更深处,我意外地将 testingArr 分配给了异步上下文之外的另一个值。将此标记为已关闭。谢谢大家的时间 这就是为什么您应该创建该数组const(或let)以便检测到重复的重新分配... 【参考方案1】:

我不小心将 testingArr 设置为脚本中异步进程之外的另一个值。

【讨论】:

以上是关于Javascript - 数组是对象类型,在声明数组后直接在 .push 处失败的主要内容,如果未能解决你的问题,请参考以下文章

Java基础之数组

JavaScript数据类型

java基础-数组

JavaScript中的内置对象(数组BooleanNumber字符串)和自定义对象

JavaScript 数据类型面向对象编程

JavaScript入门之JS中的内置对象