Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 20.01.2018, 01:27
Новичок на форуме
Отправить личное сообщение для ZNGR Посмотреть профиль Найти все сообщения от ZNGR
 
Регистрация: 20.01.2018
Сообщений: 2

Превратить строку в оператор
Всем, доброго времени суток.

Учу JS и одна из задач состоит в том, чтобы написать функцию с аргументами X, znak (в виде строки), Y. Не могу понять как сделать таким образом, чтобы происходила математическая операция. Все до чего додумался это использовать switch (ну или if ). Может кто-то подскажет более изящное решение? Заранее благодарен.

function doMath(x,znak,y){
	var math = 0;
	switch(znak) {
		case '+':
		math = x + y;
		break;

		case '-':
		math = x - y;
		break;

		case '*':
		math = x * y;
		break;

		case '/':
		math = x / y;
		break;

		case '%':
		math = x % y;
		break;

		case '^':
		math = x ^ y;
		break;
	}
	return math
}
Ответить с цитированием
  #2 (permalink)  
Старый 20.01.2018, 01:47
Аватар для Aetae
Любитель
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 5,058

Единственный безопасный вариант. Именно так и стоит делать.
А так в плане поиграться есть eval:
alert( eval(1 + ' + ' + 3) )
__________________
29375, 35
Ответить с цитированием
  #3 (permalink)  
Старый 29.01.2018, 17:35
Новичок на форуме
Отправить личное сообщение для ZNGR Посмотреть профиль Найти все сообщения от ZNGR
 
Регистрация: 20.01.2018
Сообщений: 2

Сообщение от Aetae Посмотреть сообщение
Единственный безопасный вариант. Именно так и стоит делать.
А так в плане поиграться есть eval:
alert( eval(1 + ' + ' + 3) )
Спасибо, очень признателен
Ответить с цитированием
  #4 (permalink)  
Старый 29.01.2018, 18:06
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,217

ZNGR,
Чтобы без eval и вводить сложные формулы - Обратная польская запись, пост №14

Последний раз редактировалось Dilettante_Pro, 29.01.2018 в 18:12.
Ответить с цитированием
  #5 (permalink)  
Старый 29.01.2018, 21:01
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 2,338

Dilettante_Pro,
нажимаете (permalink) в нужном посте и вуаля

http://javascript.ru/forum/showthrea...876#post405876
Ответить с цитированием
  #6 (permalink)  
Старый 29.01.2018, 22:08
Аватар для Poznakomlus
Профессор
Отправить личное сообщение для Poznakomlus Посмотреть профиль Найти все сообщения от Poznakomlus
 
Регистрация: 13.03.2013
Сообщений: 1,211

знаю 3 способа выполнить строку
1. eval
2. Function
3. Вставить <script> динамически
Кто знает еще варианты?
Ответить с цитированием
  #7 (permalink)  
Старый 30.01.2018, 00:22
Аватар для Белый шум
Профессор
Отправить личное сообщение для Белый шум Посмотреть профиль Найти все сообщения от Белый шум
 
Регистрация: 19.01.2012
Сообщений: 243

Безопасный eval:
http://blog.namangoel.com/replacing-...h-a-web-worker
Ответить с цитированием
  #8 (permalink)  
Старый 30.01.2018, 01:51
Аватар для Poznakomlus
Профессор
Отправить личное сообщение для Poznakomlus Посмотреть профиль Найти все сообщения от Poznakomlus
 
Регистрация: 13.03.2013
Сообщений: 1,211

Эт забыл про worker
function getWorker() {
        var blob;
        window.URL = window.URL || window.webkitURL || window.mozURL || window.msURL;
        var mimeString = 'application/javascript';
        var code = "onmessage = function(e) { postMessage('My' + e.data); }";
        try {
            blob = new Blob([code], {type: mimeString});
        } catch (e) {
            var BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder ||
                window.MozBlobBuilder || window.MSBlobBuilder;
            var bb = new BlobBuilder();
            bb.append(code);
            blob = bb.getBlob(mimeString);
        }
        var url = window.URL.createObjectURL(blob);
        var worker = new Worker(url);
        URL.revokeObjectURL(url);
        return worker;
    }

    var worker = getWorker();
    worker.postMessage('Test');
    worker.onmessage = function (e) {
        alert(e.data);
    };

Пример Function
var fn = "function (a, b) {\
return a + b;\
}";
var call = Function('return ' + fn)();

alert(call(1, 2));
Ответить с цитированием
  #9 (permalink)  
Старый 30.01.2018, 21:17
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 390

Сообщение от Poznakomlus Посмотреть сообщение
Пример Function
var fn = "function (a, b) {\
return a + b;\
}";
var call = Function('return ' + fn)();

alert(call(1, 2));
проще так:
var call = Function('a,b', 'return a + b');

alert(call(1, 2));
Ответить с цитированием
  #10 (permalink)  
Старый 30.01.2018, 21:26
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 2,338

Сообщение от Poznakomlus Посмотреть сообщение
Кто знает еще варианты?
отправить на сервер, выполнить и вернуть ответ
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
превратить ячейку таблицы в ссылку Влад137 Ваши сайты и скрипты 11 27.11.2017 21:26
Как преобразовать строку в шаблонную строку (template literals) daima Элементы интерфейса 5 01.09.2017 17:14
Преобразование многомерного массива в строку и обратно Bond Общие вопросы Javascript 5 08.04.2015 13:16
Вставить значение переменных в строку someone Общие вопросы Javascript 2 02.11.2013 22:14
float-переменная преобразуется в строку с запятой EugenyK Firefox/Mozilla 4 03.08.2013 05:22