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);
});