Jquery 未定义的错误继续显示速记if语句

Jquery 未定义的错误继续显示速记if语句,jquery,Jquery,我试图使用一个缩写if语句,因为如果我的变量未定义,我想显示一个空属性。问题是我一直收到一个错误,关于obj显示无法读取属性。我得到的错误是“UncaughtTypeError:无法读取未定义的属性'data'”有什么建议吗 var actions = { success : function (data) { var obj = $.parseJSON(data); //the problem starts here chart

我试图使用一个缩写if语句,因为如果我的变量未定义,我想显示一个空属性。问题是我一直收到一个错误,关于obj显示无法读取属性。我得到的错误是“UncaughtTypeError:无法读取未定义的属性'data'”有什么建议吗

    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.data
obj.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我不是这个意思。只是告诉你你的