Неожиданный токен, ожидается:

Я хочу работать с тернарным оператором, но получаю следующее сообщение об ошибке:

"Неожиданный токен, ожидается:"

Это почему?

Это мой первый код:

const GetUp = (num) => {
  for (let i = 1; i <= num; i++) {
    if (i % 3 === 0) {
      console.info('Get')
    }
    if (i % 5 === 0) {
      console.info('Up')
    }
    if (i % 3 === 0 && i % 5 === 0) {
      console.info('GetUp')
    } else {
      console.info(i)
    }
  }
}
GetUp(200)

Это мой недавний код:

const SetRuc = (num) => {
  for (let i = 1; i <= num; i++) { 
    (i % 3 === 0) ? console.info('Set')
    (i % 5 === 0) ? console.info('Ruc')
    (i % 3 === 0 && i % 5 === 0) ? console.info('SetRuc') : console.info(i)
  }
}

SetRuc(100)

Когда вы используете тернарный оператор, вы должны предоставить ему альтернативу (после :), как вы делали в предыдущем. Вот почему он называется "тройным": потому что он состоит из трех частей, это condition ? true-branch : false-branch.

Federico klez Culloca 10.04.2018 17:21

И ваш случай не очень хорошее использование тернарных операторов, придерживайтесь if

Jean Rostan 10.04.2018 17:22

выглядит как Fizz Buzz под другим именем.

phuzi 10.04.2018 17:24

Это действительно похоже на Fizz Buzz, но при кратном 5 а также 3 выводится "Set Ruc SetRuc" вместо "SetRuc".

Luca Kiebel 10.04.2018 17:27

Что касается вашего исходного кода (у нового есть та же проблема), предположим, что он должен следовать классическим правилам для fizzbuzz, сначала поместите последнее условие и используйте else if после первого.

Federico klez Culloca 10.04.2018 17:38

Спасибо Федерико! Так было

Iván 10.04.2018 17:53
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
6
1 255
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Например, это:

(i % 3 === 0) ? console.info('Set')

не предоставляет опции : для ?. Если вы не хотите, чтобы что-либо происходило в случае, если проверка ? ложна, вы можете просто указать пустой объект или undefined:

(i % 3 === 0) ? console.info('Set') : {}
Ответ принят как подходящий

используйте && для выстрела, если без else

добавьте точки с запятой ;, чтобы сообщить ему, что это конец инструкции, в противном случае он будет оценивать три строки как одну инструкцию.

const SetRuc = (num) => {
  for (let i = 1; i <= num; i++) { 
    (i % 3 === 0) && console.info('Set');
    (i % 5 === 0) && console.info('Ruc');
    (i % 3 === 0 && i % 5 === 0) ? console.info('SetRuc') : console.info(i);
  }
}

SetRuc(100)

Вы неправильно используете тернарный оператор, синтаксис следующий:

condition ? expr1 : expr1

Предполагая, что expr1 будет выполняться, если условие истинно, в противном случае будет выполняться expr2.

Итак, вы можете захотеть это:

const SetRuc = (num) => {
  for (let i = 1; i <= num; i++) { 
    (i % 3 === 0) ? console.info('Set') :
    (i % 5 === 0) ? console.info('Ruc') :
    (i % 3 === 0 && i % 5 === 0) ? console.info('SetRuc') : console.info(i)
  }
}

SetRuc(100)
const SetRuc = (num) => {
  for (let i = 1; i <= num; i++) { 
    (i % 3 === 0) ? console.info('Set') :
    (i % 5 === 0) ? console.info('Ruc') :
    (i % 3 === 0 && i % 5 === 0) ? console.info('SetRuc') : console.info(i)
  }
}

SetRuc(100)

вы пропустили : после console.info('Set') и console.info('Ruc')

Если вы не хотите ничего делать в случае ложного результата в тернарном операторе. можно просто сказать что-то вроде statement ? 'expression' : null

просто упомяните там null. Что-то вроде

const SetRuc = (num) => {
  for (let i = 1; i <= num; i++) { 
    (i % 3 === 0) ? console.info('Set') : null;
    (i % 5 === 0) ? console.info('Ruc') : null;
    (i % 3 === 0 && i % 5 === 0) ? console.info('SetRuc') : console.info(i);
  }
}

SetRuc(100)

Другие вопросы по теме