У меня есть строка, содержащая логическую логику, например:
var test = "(true)&&(false)&&!(true||true)"
Каков хороший способ оценить эту строку в JavaScript, чтобы получить логическое значение false в этом случае
- Я знаю, что мы могли бы использовать eval () или новую функцию () .. - но это безопасный подход?
- Я предполагаю, что другим вариантом было бы написать собственный парсер. Неужели для того, чтобы быть довольно новым человеком в JS, потребуется много усилий? Мне не удалось найти примеров парсеров для логических выражений
- Есть ли другие альтернативы?
"(true)&&(false)&&!(true||true)"
? - person Rayon   schedule 01.04.2016eval
безопасно использовать только тогда, когда вы можете гарантировать, что источник не является вредоносным и не содержит проблемы. Если вы создаете строку, и вы написали свой код, чтобы гарантировать создание только логической строки, все должно быть в порядке. - person Akshat Mahajan   schedule 01.04.2016"(1)&(0)&!(1||1)"
(все токены состоят только из 1 символа), было бы легче разобрать - person Oriol   schedule 01.04.2016new Function()
не имеет смысла, потому что на самом деле вам не нужна функция, вам просто нужен результат выражения. - person nnnnnn   schedule 01.04.2016new Function("return " + boolStr)()
. Конечноeval(boolStr)
было бы лучше. Оба могут запускать произвольный JS, поэтому избегайте их, если источнику не доверяют. - person Oriol   schedule 01.04.2016eval
? ИЛИ, если сервер возвращает всю строку, почему сервер не может самостоятельно проверить это условие и ответить одним _2 _ / _ 3_ для всего условия? - person haldagan   schedule 01.04.2016new Function()
, я просто имел в виду, что это бессмысленно сложная альтернативаeval()
. В проблеме с одним символом 1 | 0 вы можете просто использовать .replace () перед синтаксическим анализом ... - person nnnnnn   schedule 01.04.2016