我正在尝试使用简写if语句,因为如果我的变量未定义,我想显示一个空属性。问题是我一直收到关于显示无法读取属性的obj的错误。我得到的错误是“Uncaught TypeError:无法读取未定义的属性'数据'”有什么建议吗?
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":""}}
答案 0 :(得分:0)
这是你得到的回应:
{
"comparison": false,
"title": "Projects by Area Breakdown | January 2016 to July 2015",
"series": {
"name": "Area Breakdown",
"colorByPoint": true,
"data": ""
}
}
你正在努力:
chart_data = obj.series.data.series
正如您所见,series
中没有"data":""
。这样会导致js错误。
我的建议是检查它的长度:
chart_data = obj.series.data.length !== 0 ? obj.series.data : "";
或更短的一个:
chart_data = obj.series.data || "";
答案 1 :(得分:0)
编辑:
假设检查undefined
表示有时obj.series.data
具有有效的series
属性,有时不会。
obj.series.data.series != 'undefined'
应该是
obj.series.data.series != undefined
请注意,undefined
不是字符串''
。
或更好的方式
obj.series.data.series !== undefined
var obj = {
"comparison": false,
"title": "Projects by Area Breakdown | January 2016 to July 2015",
"series": {
"name": "Area Breakdown",
"colorByPoint": true,
"data": ""
}
}
var chart_data = obj.series.data.series !== undefined ? (obj.series.data.series.data) : '';
console.log('chart_data : ',chart_data)

答案 2 :(得分:0)
这意味着 obj.series
未定义。
避免此错误的简写是写
obj.series = obj.series || {};
如果未定义则将其初始化并将其置于错误LOC:
之上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) {
// ...
}
或
obj.series ? /* true condition*/ : /* false condition*/
或广泛检查:
if(typeof obj.series != 'undefined') {
// ...
}
或
typeof obj.series != 'undefined' ? /* true condition*/ : /* false condition*/