我已经声明了一个名为init()
的函数,它询问用户游戏的大小,该大小由空格分隔。我想在用户不单击ok
并像取消时一样显示提示(明确单击“取消”或隐式按下esc
键盘)。
这是我已经实现的:
function init(){
let promptMessage = 'تعداد سطرها و ستونهای جدول را به ترتیب وارد کرده و با فاصله از هم جدا کنید\nمثلا مقدار پیشفرض دارای 7 جدول و 6 ستون است';
let promptDefault = '7 6';
let prompt = this.prompt(promptMessage, promptDefault);
if (prompt) {
prompt = prompt.split(" ")
console.log(prompt);
prompt[0] = Number(prompt[0]);
prompt[1] = Number(prompt[1]);
return prompt;
}
init()
}
var gameSize = init(),
rows = gameSize[0],
cols = gameSize[1];
当我测试上面的代码时,单击取消后,它可以正常工作并再次显示提示,但问题是它给了我以下错误。
未捕获的TypeError:无法读取行
rows = gameSize[0]
中未定义的属性“ 0” 最佳答案
当您调用gameSize = init()
时,它将运行init()函数,并且如果用户单击“取消”,该函数将返回undefined
,因为您未在该代码路径中声明return
语句。
然后,当您执行var rows = gameSize[0]
时,此时gameSize
是undefined
并导致您看到错误。
您需要做的是从下一个init()
调用返回结果。
function init(){
let promptMessage = 'تعداد سطرها و ستونهای جدول را به ترتیب وارد کرده و با فاصله از هم جدا کنید\nمثلا مقدار پیشفرض دارای 7 جدول و 6 ستون است';
let promptDefault = '7 6';
let prompt = this.prompt(promptMessage, promptDefault);
if (prompt) {
prompt = prompt.split(" ")
console.log(prompt);
prompt[0] = Number(prompt[0]);
prompt[1] = Number(prompt[1]);
return prompt;
}
return init();
}
var gameSize = init(),
rows = gameSize[0],
cols = gameSize[1];
关于javascript - 在用户取消时显示提示,但未捕获typeError,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53122343/