как можно преобразовать строковое выражение не используя eval()?
допустим, получаю из инпута строку тип "2+1".если перевести ее в number -получается null.а если только '2' и '1' ,оператор останется все равно строкой. не могу сообразить , как можно сделать перевод без eval.
По сути тебе нужно написать свой языковой парсер. Который разобьёт входные значения на лексемы и всё такое прочее и интерпретирует результат. Можешь изучить теорию компиляторов, чтоб совсем хорошо было.)
Но вообще тут и простого конечного автомата хватит, если нужна поддержка скобок, или даже минимальной работы со строками - если нет.
Ну или воспользоваться готовой библиотекой как предложили выше.
let string = "2+1"
let result = 0
let script_string = "(function(){ result = " + string + "})()"
let script_element = document&createElement('script')
script_element.src = script_string
document.head.appendChild(script_element)