在用户取消时显示提示,但未捕获typeError

时间:2018-11-02 16:20:53

标签: javascript prompt

我已经声明了一个名为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'

2 个答案:

答案 0 :(得分:1)

当您调用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];

答案 1 :(得分:0)

可能是因为当您尝试访问gameSize时尚未定义它。 尝试在行和列之前声明gameSize变量

var gameSize = init();
var rows = gameSize[0],
    cols = gameSize[1];