所以我现在正在制作一些脚本,它将采用0到3999之间的值,并为该数字输出罗马数字。出于某种原因,在调用我的二维数组时,我最终得到了未定义的
function romanConverter() {
var romanOutput;
var enteredNum = prompt('What number would you like converted between 1 and 3999?');
var romanNum = [
['', 'M', 'MM', 'MMM'], // Thousands place
['', 'C', 'CC', 'CCC', 'CD', 'D', 'DC', 'DCC', 'DCCC', 'CM'], // Hundreds place
['', 'X', 'XX', 'XXX', 'XL', 'L', 'LX', 'LXX', 'LXXX', 'XC'], // These are for the tens place
['', 'I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX'] // Ones place
];
if (parseInt(enteredNum) > 3999) {
alert("I'm sorry that's not a valid entry");
enteredNum = prompt('What number would you like converted between 1 and 3999?');
} else {
while (enteredNum.length < 4) {
enteredNum = '0' + enteredNum;
}
for (var i = 0; i <= enteredNum.length; i += 1) {
var currentNum = parseInt(enteredNum.charAt(i));
romanOutput += romanNum[i][currentNum];
}
}
document.write(romanOutput);
}
romanConverter();
我总是得到TypeError: romanNum[i] is undefined
我真的被困住了,可以使用一些帮助。
答案 0 :(得分:3)
这是一个鬼鬼祟祟的小错误之一,总会让你头撞墙一段时间。
尝试将最终的for
循环更改为以下内容:
for (var i = 0; i < enteredNum.length; i += 1) { // etc...
你要严格要小于 - 不小于或等于。否则,您最终会评估"05".charAt(2);
要防止其输出为undefined
后跟转换后的罗马数字,您还需要更改显示
var romanOutput;
要
var romanOutput = "";