Первым делом пытаюсь обнаружить ближайшего противника(переменная “enemy”), и найти дистанцию до него.
Т.к. в радиусе обзора нет противника мы получаем enemy = null, а поиск дистанции выдает ошибку.
Как сделать поиск противника и дистанции ?(Так что бы не приходилось при атаке или другом действии каждый раз проверять наличие противника и его дистанцию)
Как эти данные занести в функцию типа " f_enemy(obj,dis)" Где obj - идентично переменной “enemy”, а dis - дистанция между героем и “enemy”
Первый вариант выглядит странно и переусложненым. Второй лучше.
Кстати в первом варианте enemy изначально не null. Изначально enemy === undefined. Вообще, со строгими проверками на существование надо быть аккуратней и точно знать что прилетит
findNearestEnemy() при отстутствии врага вернет null. Но в варианте
var enemy,distance;
while(true) {
while(enemy===null) {
enemy будет undefined изначально. Поэтому я и сказал что не если не уверены наверняка что должно быть, да и не часто надо разделять случаи undefined и null, то используйте более простой вариант if (!enemy) для примера.
Случаи типа enemy === null это когда вам точно надо знать что нул, а не ноль или фолс или андефайнед.
Основной вопрос решен так что тему, при желании, можно закрыть. Но есть еще непонятные для меня моменты.
1)Как понять if (!enemy) ? (Я понял так: Если переменная отсутствует то…)
2)Можно ли писать !enemy до объявления переменной?
3)
непонятка с ошибкой
var enemy,distance;
while(true) {
while(enemy===null) { -+
enemy = hero.findNearestEnemy(); | enemy=== undefined => Цикл пропускается.
} -+
hero.say(enemy); -- В ошибке указано say s argument message should have type string, but got null.
}
upd
Так вообще ничего не происходит
var enemy,distance;
while(true) {
while(enemy===undefined || enemy===null) { // while(!enemy) такой же результат
enemy = hero.findNearestEnemy();
}
hero.say(enemy);
}
Джаваскрипт язык динамический и !value -> происходит динамическое предобразование типа в булево, в итоге null undefined 0 false итп становятся false и соответственно с ! проверка на НЕ.
Не стоит
Надо смотреть как там вызов ошибки устроен, возможно там null зашит в тексте и отрабатывается и на андефайнед.
на второй случай не вылетает ошибка на вечную петлю случаем?
value равнозначно value===true; !value равнозначно value!==true?
–
Наткнулся на другом сайте на оператор typeof. Судя по результату null действительно зашит в текст.
Да…по окончании задания появляется ошибка на вечную петлю или медленный код.
Игра автоматически прерывает выполнение вечного цикла или медленного кода(до того как выделенное время на миссию закончится) ?
В встроенном редакторе выполнение кода останавливается на hero.say(enemy),
но ничего не происходит. А после миссии появляется ошибка.