#javascript #typescript #nuxt.js #vuejs3 #nuxt3
#язык JavaScript #машинописный текст #nuxt.js #vuejs3 #nuxt3
Вопрос:
Я пытаюсь получить доступ к переменной, которую я объявил в верхней части функции изнутри оператора if (также в той же функции). Это код, который я написал:
function getAround(x: number, y: number): number { console.log({x, y}); let around: number = 0; const max = (props.size - 1); console.log({around}); // top if (y gt; 0 amp;amp; grid[y - 1][x].bomb) { console.log({max: this.max}); around ; } // top right if (y lt; 0 amp;amp; x gt; max amp;amp; grid[y - 1][x 1].bomb) { around ; } //right if (x lt; max amp;amp; grid[y][x 1]) { around ; } //bottom right if (y lt; max amp;amp; x lt; max amp;amp; grid[y 1][x 1]) { around ; } //bottom if (y lt; max amp;amp; grid[y 1][x]) { around ; } //left bottom if (y lt; max amp;amp; x gt; 0 amp;amp; grid[y 1][x - 1]) { around ; } //left if (x gt; 0 amp;amp; grid[y][x - 1]) { around ; } //top left if (y gt; 0 amp;amp; x gt; 0 amp;amp; grid[y - 1][x - 1]) { around ; } return around; }
По какой-то причине это не удается при попытке увеличить, поэтому я попытался создать более простую версию:
function simple(x: number, y: number): number { let around: number = 0; if (x gt; y) { around ; } return around; }
Простая версия работает по какой-то причине. Насколько я понимаю, оба они должны работать нормально, не так ли? Вот ошибка, которую я получаю:
Error while mounting app: TypeError: Cannot read properties of undefined (reading '1') at getAround (PlayingField.vue:89) at PlayingField.vue:50 at Array.forEach (lt;anonymousgt;) at PlayingField.vue:50 at Array.forEach (lt;anonymousgt;) at getAllAround (PlayingField.vue:49) at generateGrid (PlayingField.vue:41) at setup (PlayingField.vue:45) at callWithErrorHandling (runtime-core.esm-bundler.js:6708) at setupStatefulComponent (runtime-core.esm-bundler.js:6317)
Строка 89 содержит следующий код:
console.log({max: this.max});
Я не уверен, важно ли это, но я использую Nuxt 3, и код находится внутри script setup
тега.
Комментарии:
1. Вы неправильно поняли сообщение об ошибке,
grid[n]
не определено, когда вы пытаетесь прочитатьgrid[n][1]
.2. Кроме того, в будущем, если вы предоставите сообщение об ошибке, сообщите нам, какая строка вызвала его, или в этом случае вы могли бы дать нам ссылку на код игровой площадки.
3. @Teemu Я не совсем понимаю. Ошибка указывает на строку 89 в PlayingField.vue. Эта строка такова:
console.log({max: this.max});
.4. Я сомневаюсь, что определение местоположения немного не так. Может быть, это строка выше, где у вас есть
grid[y - 1][x]
. Проверьте , чтоy-1
находится непосредственно передif
этим, иgrid[y - 1]
действительно ли существует, когдаx == 1
.5. Да. Похоже, он был отключен на одну строчку. Исправлена проблема, и теперь она работает, спасибо!
Ответ №1:
Строка, упомянутая в ошибке, отключена на единицу, и на самом деле ошибка была в строке 88. После исправления моего утверждения if теперь оно работает безупречно.
Для дальнейшего использования: Используемый браузер был Edge (Chromium) версии 96.0.1054.41 в Windows 10.