避免无法读取...未定义的属性

时间:2016-12-10 08:38:35

标签: javascript jquery

我使用此函数将标题attr附加到我表的每个tr。该表的内容来自一个数组。这很好。但是我也有一个函数,可以手动向表中添加行。对于这些行,我得到一个例外。非常清楚,因为它们不在数组中。但是我怎样才能避免这些例外呢?我不需要为这些行添加标题。

它说:

  

无法读取属性' dictCanon'未定义的(...)

function postBody() {
    // add title to tr
    var trs = $table.find('tbody').children();
    for (var i = 0; i < trs.length; i++) {
        $(trs[i]).mouseover(function(e) {
            index = $(e.currentTarget).data('index');
            var d = (diagnosis[index].additionalParameters);
            console.log('d', d);
            dt = $(e.currentTarget).parent().parent().find('thead').find('th')
                                   .eq($(e.currentTarget).data('index')).data();
            //console.log(dictCanon);
            if (d != undefined || d !== 'null') {
                 var dictCanon = diagnosis[index].additionalParameters.dictCanon;
                 var icd = diagnosis[index].additionalParameters.icd;
                 $(this).attr('title',icd + ' ' + dictCanon);
             }
        });                
    };
};

1 个答案:

答案 0 :(得分:1)

错误“无法读取属性'dictCanon'未定义”在此表达式上被触发:

diagnosis

...这意味着您在additionalParameters中的条目没有&&属性。您试图保护代码免受该错误的影响,但是使用了错误的布尔运算符。使用||代替null,不要将for放在引号中。我还建议您调整diagnosis循环中的条件,以确保您在function postBody() { // add title to tr var trs = $table.find('tbody').children(); for (var i = 0; i < trs.length && i < diagnosis.length; i++) { $(trs[i]).mouseover(function(e) { var index = $(e.currentTarget).data('index'); // use `var` var d = diagnosis[index].additionalParameters // parentheses not needed console.log('d', d); dt = $(e.currentTarget).parent().parent().find('thead').find('th') .eq(index).data(); // you have `index`, use it //console.log(dictCanon); if (d !== undefined && d !== null) { // <--- changed! var dictCanon = d.dictCanon; // <-- you have `d`, use it var icd = d.icd; // <-- idem $(this).attr('title',icd + ' ' + dictCanon); } }); }; }; 中有必要的条目:

"private_key": "-----BEGIN PRIVATE KEY-----veryLongKey---END PRIVATE KEY-----\n",
"client_email": "randomemail@appspot.gserviceaccount.com",

另请注意我做的其他一些更改...请参阅代码中的注释。