Javascript 错误:使用时无法读取undefined的属性push。对存储在对象中的空数组进行push

Javascript 错误:使用时无法读取undefined的属性push。对存储在对象中的空数组进行push,javascript,jquery,Javascript,Jquery,当用户单击“保存”时,我需要使用input\u product类从输入中收集所有数据,并使用以下格式将其编译为data: data = {param1:[{upc:'upc', value:'value'}, ... ], ... paramN: [ ... ]} 我尝试使用下面的代码执行此操作,但不断出现此错误: 未捕获的TypeError:无法读取未定义的属性“push” 这里缺少什么?中的运算符的优先级低于操作员。您需要在数据中的参数周围添加括号;改变 if(!param in dat

当用户单击“保存”时,我需要使用
input\u product
类从输入中收集所有数据,并使用以下格式将其编译为
data

data = {param1:[{upc:'upc', value:'value'}, ... ], ... paramN: [ ... ]}

我尝试使用下面的代码执行此操作,但不断出现此错误:

未捕获的TypeError:无法读取未定义的属性“push”


这里缺少什么?

中的
运算符的优先级低于
操作员。您需要在数据中的
参数周围添加括号
;改变

if(!param in data)

目前,您正在做的是将
param
的值转换为布尔值,对其求反,然后检查该求反的结果是否作为键存在于对象
数据中(即,您正在编写的内容相当于
if((!param)in data)
),相反,当您想检查
param
是否作为键存在于
数据中时,如果
param
数据中不作为键存在,则否定该结果以执行某些代码。因此,您从未在
数据
中设置键
参数
的值,因此它保持在
未定义的
,您会得到
未捕获类型错误:无法读取未定义的属性“push”

试试这个:

$('.save').on('click', function() {
  event.preventDefault();
  var data = {};

  $('.input_product').each(function() {

    const
    param = $(this).attr('name'),
    upc = $(this).parent().parent().attr('id'),
    value = $(this).val()

    console.log(param, upc, value);

    if (value && param) {
       if (!(param in data)) {//added brackets
           data[param] = [];
       }
       data[param].push({'upc':upc, 'value':value}); 
    }
  });
 window.someFunction(data);
});

正在使用JSFIDLE Demo:

当错误发生时,
数据
参数
的内容是什么?
if(!(param in data))
$('.save').on('click', function() {
  event.preventDefault();
  var data = {};

  $('.input_product').each(function() {

    const
    param = $(this).attr('name'),
    upc = $(this).parent().parent().attr('id'),
    value = $(this).val()

    console.log(param, upc, value);

    if (value && param) {
       if (!(param in data)) {//added brackets
           data[param] = [];
       }
       data[param].push({'upc':upc, 'value':value}); 
    }
  });
 window.someFunction(data);
});