簡體   English   中英

未捕獲的TypeError:無法將未定義或null轉換為對象

[英]Uncaught TypeError: Cannot convert undefined or null to object

我在使用我的函數之一時遇到問題。在哪一行出現錯誤: 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)
    });
});

有人可以幫我加分嗎?

match可以返回null (如果沒有匹配項),但是在調用delete(parts[0]);之前不會檢查是否發生了這種情況delete(parts[0]);

這是我不清楚你為什么刪除返回數組(我可能會使用該類型shift ),但如果你(或如果您使用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與全局變量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('');
}

然后當您使用它時:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM