Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 12.06.2016, 20:50
Профессор
Отправить личное сообщение для Яростный Меч Посмотреть профиль Найти все сообщения от Яростный Меч
 
Регистрация: 12.04.2010
Сообщений: 557

если выражение укладывается в синтаксис javascript, то можно использовать with

with ({x: 1, y: 2}) {
  with(Math) {
    alert(eval('pow(y, x + 3) + sin(PI / 2)'));
  }
}


здесь использованы переменные, функции из Math и константа PI оттуда же.

Однако eval считается плохой практикой (с чем я согласен), да и with вроде как тоже.

Потому всё это дело можно переписать через new Function, используя для нее набор переменных, чтобы прокинуть функции и переменные.
Ответить с цитированием
  #12 (permalink)  
Старый 12.06.2016, 20:53
Профессор
Отправить личное сообщение для Яростный Меч Посмотреть профиль Найти все сообщения от Яростный Меч
 
Регистрация: 12.04.2010
Сообщений: 557

Ну а при наличии операций вроде 5^2, увы, придется делать "по-честному" - парсить строку, строить дерево выражения, вычислять его...
Ответить с цитированием
  #13 (permalink)  
Старый 12.06.2016, 21:26
Профессор
Отправить личное сообщение для Яростный Меч Посмотреть профиль Найти все сообщения от Яростный Меч
 
Регистрация: 12.04.2010
Сообщений: 557

во, через функцию, с проверкой на синтаксис )

function createSolver(vars, expr) {
  try {
	var func = new Function('pow,sin,cos,PI' + (vars ? ',' + vars : ''), 'return (' + expr + ')');
 } catch(exc) {
   return null;
}

  return function() {
  	var args = [Math.pow, Math.sin, Math.cos, Math.PI];
    args.push.apply(args, arguments);
    return func.apply(null, args);
  };
}

var solver = createSolver('x,y', 'pow(x, y) + sin(PI/2)');
var badsolver = createSolver('x,y', '((((((');

alert(solver(2, 3));
alert(badsolver);
Ответить с цитированием
  #14 (permalink)  
Старый 12.06.2016, 22:20
Интересующийся
Отправить личное сообщение для antonizbraniy Посмотреть профиль Найти все сообщения от antonizbraniy
 
Регистрация: 12.05.2015
Сообщений: 16

Большое спасибо за ответы, такие быстрые и разъясненные. Буду разбираться.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Арифметические действия на простом примере, обьясните почему c равно 2, а не 3? Игорь1000 Общие вопросы Javascript 5 06.03.2016 15:03
Находится ли мышка над дивом ? (выпадающее меню) advsm jQuery 31 24.09.2014 17:50
D'n'D над фреймами otkrick Общие вопросы Javascript 1 27.05.2013 20:12
Получить элемент относительно текущего, над которым произошло действие Киноман jQuery 2 30.04.2012 00:24
Арифметические действия Anastasiy17 Общие вопросы Javascript 11 14.04.2012 21:11