Почему метод возвращает NaN? В общем имеется метод, принимает строку-числа с арифмитическим действием, который по сути должен возвращать результат, те преобразоваться и как нормально преобразовать, и возвратить результат сложения например?function Calculator() { this.calculate = function (str){
return +str; } } var calc = new Calculator(); console.log(calc.calculate("2 + 4")); // 6
Проблема заключается в том, что ваш метод calculate пытается преобразовать строку в число, но такой подход не сработает, потому что вы передаете ему строку "2 + 4", а не просто число. JavaScript не понимает как интерпретировать строку с арифметическим действием как вы хотите.
Для того чтобы метод работал правильно, вам нужно разбить строку на операнды и операторы, а затем выполнить соответствующее арифметическое действие. Например, вот как можно переделать ваше решение:
function Calculator() { this.calculate = function (str) { var tokens = str.split(' '); // Разбиваем строку на операнды и оператор var operand1 = parseInt(tokens[0]); // Преобразуем операнды в числа var operator = tokens[1]; // Получаем оператор var operand2 = parseInt(tokens[2]); // Преобразуем операнды в числа switch (operator) { case '+': return operand1 + operand2; case '-': return operand1 - operand2; case '*': return operand1 * operand2; case '/': return operand1 / operand2; default: return NaN; } } } var calc = new Calculator(); console.log(calc.calculate("2 + 4")); // 6
Теперь ваш метод calculate правильно разбивает строку на операнды и оператор, выполняет соответствующее арифметическое действие и возвращает результат.
Проблема заключается в том, что ваш метод calculate пытается преобразовать строку в число, но такой подход не сработает, потому что вы передаете ему строку "2 + 4", а не просто число. JavaScript не понимает как интерпретировать строку с арифметическим действием как вы хотите.
Для того чтобы метод работал правильно, вам нужно разбить строку на операнды и операторы, а затем выполнить соответствующее арифметическое действие. Например, вот как можно переделать ваше решение:
function Calculator() {this.calculate = function (str) {
var tokens = str.split(' '); // Разбиваем строку на операнды и оператор
var operand1 = parseInt(tokens[0]); // Преобразуем операнды в числа
var operator = tokens[1]; // Получаем оператор
var operand2 = parseInt(tokens[2]); // Преобразуем операнды в числа
switch (operator) {
case '+':
return operand1 + operand2;
case '-':
return operand1 - operand2;
case '*':
return operand1 * operand2;
case '/':
return operand1 / operand2;
default:
return NaN;
}
}
}
var calc = new Calculator();
console.log(calc.calculate("2 + 4")); // 6
Теперь ваш метод calculate правильно разбивает строку на операнды и оператор, выполняет соответствующее арифметическое действие и возвращает результат.