Jquery 未定义的错误继续显示速记if语句
我试图使用一个缩写if语句,因为如果我的变量未定义,我想显示一个空属性。问题是我一直收到一个错误,关于obj显示无法读取属性。我得到的错误是“UncaughtTypeError:无法读取未定义的属性'data'”有什么建议吗Jquery 未定义的错误继续显示速记if语句,jquery,Jquery,我试图使用一个缩写if语句,因为如果我的变量未定义,我想显示一个空属性。问题是我一直收到一个错误,关于obj显示无法读取属性。我得到的错误是“UncaughtTypeError:无法读取未定义的属性'data'”有什么建议吗 var actions = { success : function (data) { var obj = $.parseJSON(data); //the problem starts here chart
var actions = {
success : function (data) {
var obj = $.parseJSON(data);
//the problem starts here
chart_data = obj.series.data.series != 'undefined' ? (obj.series.data.series.data) : '';
chart_name['series'] = [{
name: obj.series.name,
data: chart_data
}];
var chart = new Highcharts.Chart(chart_name);
//------------------------------------------------------
// Set titles for charts
//------------------------------------------------------
chart.setTitle({text: obj.title});
//------------------------------------------------------
// Set sub titles for charts
//------------------------------------------------------
chart.setTitle(null, {text: ' '});
}
};
从数据中恢复
Success: {"comparison":false,"title":"Projects by Area Breakdown | January 2016 to July 2015","series":{"name":"Area Breakdown","colorByPoint":true,"data":""}}
以下是您得到的答复:
{
“比较”:错,
“标题”:“按区域划分的项目| 2016年1月至2015年7月”,
“系列”:{
“名称”:“区域细分”,
“colorByPoint”:正确,
“数据”:”
}
}
您正在尝试:
chart_data = obj.series.data.series
如您所见,数据中没有系列
:“
。这会导致js错误
我的建议是检查它的长度:
chart_data = obj.series.data.length !== 0 ? obj.series.data : "";
或者短一点的:
chart_data = obj.series.data || "";
以下是您得到的答复:
{
“比较”:错,
“标题”:“按区域划分的项目| 2016年1月至2015年7月”,
“系列”:{
“名称”:“区域细分”,
“colorByPoint”:正确,
“数据”:”
}
}
您正在尝试:
chart_data = obj.series.data.series
如您所见,数据中没有系列
:“
。这会导致js错误
我的建议是检查它的长度:
chart_data = obj.series.data.length !== 0 ? obj.series.data : "";
或者短一点的:
chart_data = obj.series.data || "";
编辑:
假设检查undefined
意味着有时obj.series.data
具有有效的series
属性,有时则没有
应该是
obj.series.data.series != undefined
请注意,undefined
不是字符串'
还是更好的方法
obj.series.data.series !== undefined
var obj={
“比较”:错,
“标题”:“按区域划分的项目| 2016年1月至2015年7月”,
“系列”:{
“名称”:“区域细分”,
“colorByPoint”:正确,
“数据”:”
}
}
var图表\u数据=obj.series.data.series!==未定义?(obj系列数据系列数据):“”;
console.log('图表数据:',图表数据)
编辑:
假设检查undefined
意味着有时obj.series.data
具有有效的series
属性,有时则没有
应该是
obj.series.data.series != undefined
请注意,undefined
不是字符串'
还是更好的方法
obj.series.data.series !== undefined
var obj={
“比较”:错,
“标题”:“按区域划分的项目| 2016年1月至2015年7月”,
“系列”:{
“名称”:“区域细分”,
“colorByPoint”:正确,
“数据”:”
}
}
var图表\u数据=obj.series.data.series!==未定义?(obj系列数据系列数据):“”;
console.log('chart\u data:',chart\u data)
这意味着未定义对象系列。
避免这个错误的一个简写方法是写
obj.series = obj.series || {};
如果未定义,则初始化它并将其置于错误位置之上:
function (data) {
var obj = $.parseJSON(data);
obj.series = obj.series || {};
// ...
但是,问题是一次访问多个子对象,因此必须多次扩展该原则:
chart_data = ((obj.series || {}).data || {}).series != 'undefined' ? (((obj.series || {}).data || {}).series || {}).data : '';
但这很难看
也许最好将obj
传递给构造函数,该构造函数初始化“
所需的变量
其次,可以很快检查未定义的变量,如:
if(obj.series) {
// ...
}
或
或广泛检查:
if(typeof obj.series != 'undefined') {
// ...
}
或
这意味着未定义对象系列。
避免这个错误的一个简写方法是写
obj.series = obj.series || {};
如果未定义,则初始化它并将其置于错误位置之上:
function (data) {
var obj = $.parseJSON(data);
obj.series = obj.series || {};
// ...
但是,问题是一次访问多个子对象,因此必须多次扩展该原则:
chart_data = ((obj.series || {}).data || {}).series != 'undefined' ? (((obj.series || {}).data || {}).series || {}).data : '';
但这很难看
也许最好将obj
传递给构造函数,该构造函数初始化“
所需的变量
其次,可以很快检查未定义的变量,如:
if(obj.series) {
// ...
}
或
或广泛检查:
if(typeof obj.series != 'undefined') {
// ...
}
或
obj.series
未定义,因此无法obj.series.data
。简单。您的错误意味着“obj.series”未定义,请在控制台中检查“obj”的日志值否,obj.series.data.series未定义。错误来自obj.series.data.series.dataobj.series
未定义,因此无法obj.series.data
。简单。您的错误意味着“obj.series”未定义,请在控制台中检查“obj”的日志值否,obj.series.data.series未定义。错误来自obj.series.data.series.data,这就是为什么我使用typeof进行了回答,但得到了否决票,而您仍然发布了相同的答案:)键
数据没有任何键为系列
的对象,因此这将破坏那里的代码。@BhojendraNepal,主要问题是用于比较未定义
的字符串文字。我没有使用typeof
发布相同的答案;我也没有投反对票。:)
@Jai,不,密码不会被破解;这就是undefined
检查的目的。询问者这样做的主要原因是,有时候obj.series.data
有series
属性,有时候没有。@ShaunakD我不是这个意思。只是告诉你,你和我的答案是相同的,但对OP没有帮助。这就是为什么我用typeof回答,但得到了否决票,而你仍然发布了相同的答案:)键
数据没有任何键为系列
的对象,因此这将破坏那里的代码。@BhojendraNepal,主要问题是用于比较未定义
的字符串文字。我没有使用typeof
发布相同的答案;我也没有投反对票。:)
@Jai,不,密码不会被破解;这就是undefined
检查的目的。询问者这样做的主要原因是,有时候obj.series.data
有series
属性,有时候没有。@ShaunakD我不是这个意思。只是告诉你你的