我在使用我的一个函数时遇到问题。在哪一行出现错误: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)
});
});
任何人都可以帮助我理解吗?并获得解决方案
答案 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('');
}