Вызов "Калькулятор" не работает

Что Вы делаете здесь, на курсах для новичков?:slight_smile:

ну эцсамое, я как бы сам новичок

после того, как нашел оператор switch, оптимальным видится такое решение:

var calculate = function ( firstNumber, secondNumber, operator) {
switch (operator) {
case ‘+’ : return (parseInt(firstNumber, 10)+parseInt(secondNumber, 10));
case ‘-’ : return (parseInt(firstNumber, 10)-parseInt(secondNumber, 10));
case ‘*’ : return (parseInt(firstNumber, 10)*parseInt(secondNumber, 10));
case ‘/’ : return (parseInt(firstNumber, 10)/parseInt(secondNumber, 10));
}
}

А зачем скобки после return?

У вас наверное самое простое.Но всё же для меня не очень понятно.
switch (operator) {
case ‘+’ ______; break; Заменяет if, как я поняла.
Следующие
case ‘+’ ______; break; заменяют else if и т.д. если я правильно поняла?
Но почему то если я ставлю if, то чего у меня нитого выходит, ошибки какие то. var calculate = function(firstNumber, secondNumber, operator) {
var num1 = +firstNumber;
var num2 = +secondNumber;

if(’+’){
num1 += num2;
};
else if(’-’){
num1 -= num2;
};
else if(’*’){
num1 *= num2;
};
else(’/’){
num1 /= num2;
};
return num1;
};

4 точки с запятой лишние
просто else не нужен, только else if
не задействован operator - где он у вас в теле функции?
если придираться - зачем вводите новые переменные? модифицируйте имеющиеся 3

Поправил ваше, открывать в случае отчаяния
var calculate = function(firstNumber, secondNumber, operator) {
  if (operator == '+') {
    firstNumber = +firstNumber + +secondNumber;
  } else if (operator == '-') {
    firstNumber -= secondNumber;
  } else if (operator == '*') {
    firstNumber *= secondNumber;
  } else if (operator == '/') {
    firstNumber /= secondNumber;
  }
  return firstNumber;
};

самые короткие опасные решения:

раз
function calculate(x, y, o) {
  return (new Function('return ' + x + o + y))();
}
два
 const calculate = (x, y, o) => eval( x + o + y );

Спасибо, короткие конечно прикольные, но неясные, мы же таких символов и так составлять с такими командами ещё не учились, нам это ещё не знакомо. Было бы неплохо если бы в курсах разъясняли значения этих команд, но там такого нет. Ясно будет тем кто до этого касался и изучал ранее, как я поняла, здесь таких много. Но возьму на заметку, возможно в других справочниках и пособиях найду их понятия, что и что обозначает.

тут на курсах вряд ли будут про это рассказывать вообще. eval вообще как огня боятся (на это есть причины). тут многое не рассказывают что вообще-то стоило бы (но тогда на интенсив никто не пойдет).
я не уверен, что на курсах когда-то про прототипирование вообще расскажут, которое в основе всего и дает целостную картинку понимания что вообще происходит тут, откуда методы берутся, как определяется this и пр. про промисы вообще молчу.

Что-то не совсем вас поняла, почему бояться и не пойдут на курсы если его ввести?
При просмотре других решений, видела что ими многие пользуются (имею в виду не именно eval, а вообще в целом другими неизученными командами).
И разве на курсах не должны пояснять именно основу? И есть ли где можно было почитать более подробно и чтобы для новичков ясно излагалась про это? Про html нашла сайты, в которых можно более менее понять и хорошие шпаргалки, а вот с явоскриптом, есть конечно сайты, но для новичков трудновато воспринимается, хотелось бы более подробно и по шагам.

Ну js сложноватый язык. Лучше изучить для начала типизированный язык, даже Бейсик подойдет

Ну или книжку Моргана “js для самых маленьких”

1 лайк

вместо ParseInt можно Number(firstNumber) было лучше использовать -

сделал через Мапу(словарь)
const Operators = { 
  '+': (a, b) => a + b,
  '-': (a, b) => a - b,
  '*': (a, b) => a * b,
  '/': (a, b) => a / b,
};

const calculate = (firstNumber, secondNumber, operator) => {
  firstNumber = parseInt(firstNumber, 10);
  secondNumber = parseInt(secondNumber, 10);
  
  const result = Operators[operator](firstNumber, secondNumber);
  return result;
};

P.S - я сначала через find искал нужный оператор - так тоже можно)

мне больше нравится вот так приводить к числу: +str

это хак…ты любишь хаки)

это унарный плюс! (у него даже свой приоритет есть в стандарте: п. 12.5.6)
это классика, это знать надо! ©
image

инкремент тоже хак? =)

1 лайк

Встретились как-то два js-ра :slight_smile:

Просто не очевидные особенности конкретно языка js никогда не любил :slight_smile:
////
Поэтому лучше явное чем не явное)
ничего особенного, просто это мой кодстайл)

Ольга, js - ра, ? - что это?

Джеэсера :sunglasses:

ахах) вот оно что)

кстати насчет неочевидного, вот “+” еще ок
а вот приведение к строке вместо String(), toString() или num + “” использовать
num + [] вот это я считаю неочевидным =)