#javascript #if-statement
#javascript #if-оператор
Вопрос:
Я написал if
заявление, за которым следует else
заявление. Теперь, даже если условия выполнены, он просто перейдет к else
инструкции.
Я пытался использовать Objects.equal()
, но это не совсем то, что я хочу, поскольку я использую >=
знаки вместо ==
signs, это также выдает мне ошибки, и в основном вся программа не работает. Я также попытался присвоить всем условиям значения по умолчанию, чтобы я мог быть уверен, что они выполнены, но по-прежнему ничего.
Это функция, которая содержит if
инструкцию.
function evolve() {
if (coins >= 1000000000 amp;amp; timesbuyj1 >= 10 amp;amp; timesbuyj2 >= 10 amp;amp; timesbuyj3 >= 10) {
evolutions = evolutions = 1
var coins = 0
var timesbuyj1 = 0
var price01cs = 15
var timesbuyj2 = 0
var price1cs = 100
var timesbuyj3 = 0
var price8cs = 1100
var timesbuyj4 = 0
// a bunch of lines of code that doesn't concern this here //
} else {
alert("You don't meet the requirements.")
}
}
Когда я меняю значения, чтобы удовлетворить условиям, я ожидаю, что все сбросится, изменится и т.д.. Но это просто сообщает мне You don't meet the requirements.
и не запускает код, который он должен запускать.
Комментарии:
1. Почему вы проверяете переменные перед их инициализацией?
2. Можете ли вы «предупредить» значения этих 4 переменных? Что такое на самом деле эти значения?
3. вы объявили эти переменные перед вызовом функции? Если у вас есть, передайте их функции. Это сделает это.
4. Ваш код в том виде, в каком он написан, просто не имеет смысла. Вы тестируете переменные, которые объявлены
var
внутриif
блока (и, следовательно, «подняты» на вершину области видимости), но присвоение значений этим переменным не происходит, если не взятаif
ветвь, чего никогда не происходит.5. Ник, переменные фактически существовали до этого, но я поместил их здесь, чтобы вернуть им значения по умолчанию. DEVCNN, да, я уже объявил переменные и просто сбрасываю их в этой функции, что означает «передать их функции»? Я думал, что делаю это. Ханс, да, я могу использовать
alert()
для значений, это просто значения для монет и количество времени, за которое игрок что-то купил. Алнитак, как я уже говорил другим людям, я уже объявил эти переменные и просто возвращаю им значения по умолчанию.
Ответ №1:
То, с чем вы сталкиваетесь, — это увеличение переменной из-за вашего объявления с var
внутри if. Это означает, что ваши переменные не такие, какими вы их считаете, но undefined
— несмотря на то, что вы объявили их вне функции. Простой пример:
var bar = "foo";
function foo() {
console.log(bar); // undefined
if (bar === undefined) { // true, even though you've declared it outside the function; but overriden from var bar = "bar"; inside the if
alert('hoisting');
var bar = "bar";
} else {
alert('never happens');
}
}
function baz() {
console.log(bar);
if (bar === undefined) { // false, bar was not overriden and still has its value from outside the value
alert('never happens');
bar = undefined;
} else {
bar = "bar";
alert(bar);
}
}
foo();
baz();
Чтобы получить желаемое поведение, не объявляйте свои переменные дважды с var
, просто переназначьте их значение
Неправильно:
var coins = 0
Правильно:
coins = 0;
Если бы вам нужно было вручную «поднять» переменные в foo, вы бы написали эквивалент примерно так — именно так интерпретируется ваш код прямо сейчас
var bar = "bar";
function foo() {
var bar;
console.log(bar);
if (bar === undefined) { // true, even though you've declared it outside the function; but overriden from var bar = "bar"; inside the if
alert('hoisting');
bar = "bar";
} else {
alert('never happens');
}
}
foo()
В любом случае, рассмотрите возможность фактической передачи значений функции, которая проверяет значения, вместо того, чтобы полагаться на переменные, объявленные глобально.