未定义的错误继续显示if语句的简写

时间:2016-07-07 08:48:58

标签: jquery

我正在尝试使用简写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":""}}

3 个答案:

答案 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*/