人们会认为将3个字符的缩写转换为数字表示将是一件容易的事。 JavaScript说“NOPE!”。javascript-being-dumb体验当天
$(selector).each(function() {
// convert month abbreviation to numerical representation
var monthStr = $(this).text().match(/[^\/]*/)[0];
var months = {
JAN: 1,
FEB: 2,
MAR: 3,
APR: 4,
MAY: 5,
JUN: 6,
JUL: 7,
AUG: 8,
SEP: 9,
OCT: 10,
NOV: 11,
DEC: 12
};
var month = months[monthStr].toString();
var date = $(this).text().replace(monthStr, month);
$(this).text(date);
});
即使代码是有效的和作品,我的控制台还与以下错误进入疯狂:
Uncaught TypeError: Cannot call method 'toString' of undefined
由于选择的文本被正确地更换,这使得(至少根据绝对没有任何意义眼)。
当我声明'monthStr'变量时,该问题似乎开始了。如果我将它设置为静态“MAR”作为示例,并从我的“月”变量定义中除去'.toString()',则不再发生错误。
此外,唯一保存代码的是已经提到的'.toString()'转换为我的月变量。如果它不在那里,我最终会得到一个'未定义'的值。
只是想分享一下我当时正在使用JavaScript的愚蠢体验,并希望有人能够详细说明为什么会抛出这个错误,即使代码完美无瑕。
尝试在设置后记录'monthStr'的值。 – 2013-03-27 00:08:02
'months'是一个对象,你试图以数组的形式评估它的内容。这就是为什么'month [monthStr]'失败。 – 2013-03-27 00:09:02
如果'monthStr'中有空格或其他意想不到的字符,那就可以解释它。你为什么不记录monthStr?当你记录'monthStr'时,找出它是否与你的月份缩写之一完全一致。 (这需要在最后检查空格) – ktm5124 2013-03-27 00:12:46