Задать вопрос
alexbuki
@alexbuki
программист js

Почему возникает ошибка при использовании тернарного оператора, но нет ошибки при использовании if?

Столкнулся со следующей проблемой:
-в цикле создаю объект и добавляю его в массив в зависимости от свойства, код ниже:
let points = {
                type: 'FeatureCollection',
                features: []
            }
            let dangerPoints = {
                type: 'FeatureCollection',
                features: []
            }

for (let key = 0; key < value.length; key++) {

                let point = {
                    geometry: {
                        type: 'Point',
                        coordinates: [value[key].coordinate.lon, value[key].coordinate.lat]
                    },
                    type: 'Feature',
                    properties: {
                        popupContent: 'Point',
                        color: value[key].color
                    },
                        //id: value[key].sn
                }
                (point.properties.color == 'red')? dangerPoints.features.push(point): points.features.push(point);
}

esLint выдает такую ошибку:
5cb44330d9346657054715.png
браузер такую:
5cb44381efbfb195573899.png

Если использую конструкцию:
if (point.properties.color == 'red') dangerPoints.features.push(point);
 else points.features.push(point);


никаких ошибок нет.

Кто-нибудь знает в чем проблема?
  • Вопрос задан
  • 198 просмотров
Подписаться 2 Простой Комментировать
Решения вопроса 3
@timokins
Точку с запятой кто-то забыл поставить после объявления point
Ответ написан
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Потому что у вас нет точки с запятой после определения point.
Поскольку сразу идёт скобка, то JS считает, что вы задали анонимную функцию и вызываете её.
А point при вызове этой функции ещё не определена.
Ответ написан
Комментировать
dollar
@dollar
Делай добро и бросай его в воду.
Потому что переменная point не определена к тому моменту, когда вы её используете.
Поставьте ; и проблема будет решена.
let point = {
  // .....
}; // <-----

Либо уберите скобки ()
point.properties.color == 'red'? dangerPoints.features.push(point): points.features.push(point);

Почему так - вопрос сложный. JavaScript - довольно запутанный язык с кучей нагромождений, так что лучше не пользоваться его "всеядностью", а соблюдать правила хорошего тона. Одно из них - точка с запятой.
Ошибка
let x=5
(x)?1:2; //error
Нормально
let x=5;
(x)?1:2; //ok
Тоже сработает
let x=5
x?1:2; //тоже ок
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы