在用户取消时显示提示,它会出现未捕获的类型错误

show prompt while the user cancels, it gets uncaught typeError

我声明了一个名为init()的函数,它询问用户游戏大小,由space分隔。我想在用户未单击 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];

当我测试上面的代码时,在我点击取消后,它可以正常工作并再次显示提示,但问题是它给我以下错误。

Uncaught TypeError: Cannot read property '0' of undefined in line rows = gameSize[0]

可能是因为当您尝试访问它时 gameSize 尚未定义。 尝试在 rows 和 cols

之前声明 gameSize 变量
var gameSize = init();
var rows = gameSize[0],
    cols = gameSize[1];

当您调用 gameSize = init() 时,它会运行 init() 函数,如果用户点击取消,该函数将 return undefined 因为您没有声明 return该代码路径中的语句。

然后当您执行 var rows = gameSize[0] 时,gameSize 在那个时候是 undefined 并导致您看到的错误。

您需要做的是 return 下一次调用 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];