未捕获的TypeError:无法将undefined或null转换为object

时间:2015-06-10 17:16:15

标签: javascript jquery css

我在使用我的一个函数时遇到问题。在哪一行出现错误:Uncaught TypeError: Cannot convert undefined or null to object

我的功能是:

function hexConvert(colorval) {
    var parts = colorval.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/);
    delete(parts[0]);   //The error is in this line
    for (var i = 1; i <= 3; ++i) {
        parts[i] = parseInt(parts[i]).toString(16);
        if (parts[i].length == 1) parts[i] = '0' + parts[i];
    }
    color = '#' + parts.join('');
}

和我使用时的代码错误正在安慰: -

var btn = $(".btn-3d");
btn.each(function(index, elem) {

    var bgColor = $(this).css('backgroundColor');
    hexConvert(bgColor);
    $(this).css({
        'box-shadow': '0px 4px 0px 0px' + ColorLuminocity(color, -0.1)
    });
});

任何人都可以帮助我理解吗?并获得解决方案

1 个答案:

答案 0 :(得分:1)

match可以返回null(如果没有匹配),但是在调用delete(parts[0]);之前您没有检查是否发生了这种情况

我不清楚为什么你希望从返回的数组中删除该条目(我可能会使用shift),但如果你这样做(或者你使用{{1 }},你需要一个shift守卫:

null

然后当你使用它时:

function hexConvert(colorval) {
    var parts = colorval.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/);
    if (!parts) {     // <====
        color = null; // <====
        return;       // <====
    }                 // <====
    delete parts[0];  // <==== `delete` isn't a function, no need for parens
    for (var i = 1; i <= 3; ++i) {
        parts[i] = parseInt(parts[i]).toString(16);
        if (parts[i].length == 1) parts[i] = '0' + parts[i];
    }
    color = '#' + parts.join('');
}

旁注:让hexConvert(bgColor); if (color) { $(this).css({ 'box-shadow': '0px 4px 0px 0px' + ColorLuminocity(color, -0.1) }); } 使用全局变量是一个非常糟糕的主意。相反,让返回结果:

hexConvert

然后当你使用它时:

function hexConvert(colorval) {
    var parts = colorval.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/);
    if (!parts) {     // <====
        return null;  // <====
    }                 // <====
    delete parts[0];  // <==== `delete` isn't a function, no need for parens
    for (var i = 1; i <= 3; ++i) {
        parts[i] = parseInt(parts[i]).toString(16);
        if (parts[i].length == 1) parts[i] = '0' + parts[i];
    }
    return '#' + parts.join('');
}