我已经声明了一个名为init()的函数,它向用户询问游戏大小,这是由空格分隔的。我希望在用户不单击ok时显示提示符,并显示为cancel (显式单击cancel或隐式按下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];当我测试上述代码时,单击cancel后,它将正确工作并再次显示提示,但问题是它会给出以下错误。
未定义的TypeError:无法读取行
rows = gameSize[0]中未定义的属性'0‘
发布于 2018-11-02 16:33:04
调用gameSize = init()时,它运行init()函数,如果用户点击cancel,该函数将返回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];
发布于 2018-11-02 16:31:18
也许是因为当您尝试访问gameSize时还没有定义它。尝试在行和cols之前声明gameSize变量
var gameSize = init();
var rows = gameSize[0],
cols = gameSize[1];https://stackoverflow.com/questions/53122343
复制相似问题