2015-12-01 1 views
1

Есть ли способ перевести что-то вроде следующей логической операции (которая использует строку из-за ввода пользователем)? Или я должен проверить все возможности? (> < => == = < и т.д.)Перевести строку на операцию в javascript

var x = 5; 
var y = 3; 
var operator = '>' 

if (x operator y) 
    doSomething(); 

    | 
    | 
    v 

if (x > y) 
    doSomething(); 
+0

вы можете использовать eval(), но это будет зло для пользовательских входов. – Raman

ответ

0

Вы можете использовать eval, предоставляя вам знать, что это зло. Хотя вам обязательно нужно проверить, действительно ли введен вход, например, если он содержит только символы '> < ='.

+0

eval отлично работает для этой цели (при тестировании), не уверен, действительно ли это безопасно или нет, когда мы идем в прямом эфире. –

+0

Возможно ли предоставить этот вход другим пользователям, например, через URL? В этом случае избегайте этого, полностью отмените этот ответ. Если пользователь должен заполнить значение сам, например, в текстовом поле, я лично не вижу никаких проблем. Это проблема, когда вы можете обмануть других в выполнение произвольных скриптов, когда ваш собственный клиент безвреден. – TJHeuvel

+0

Он будет использоваться в веб-приложении, где пользователи могут создавать собственные небольшие (простые) приложения для использования данных. –

5

Да, с объектом и соответствующими функциями, как

var comparer = { 
    '>': function (a, b) { return a > b; } 
}; 

Использование:

if (comparer[operator](x, y)) { 
    doSomething(); 
} 
0

Вы должны изменить свой путь.
С eval вы должны присваивать белый список всем операторам и дезинфицировать оба входа.

Создайте свой собственный интерфейс для своих нужд.
Может быть, это будет switch:

switch (operator) { 
    case '>': if (x > y) doSomething(); 
} 

Может быть еще немного абстрагироваться, как:

ifArg(x).relatedWith(y).as(operator).then(doSomething); 

Может быть, даже вы будете писать свой собственный небольшой интерпретатор (анализатор/лексический анализатор) и ваши пользователи будут может написать на нем программу.

Он будет использоваться в веб-приложении, где пользователи могут создавать собственные небольшие (простые) приложения для использования данных. - Mathieu Brouwers

Что вы не должны использовать здесь: eval.