Превратить строку в оператор
Всем, доброго времени суток.
Учу 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 } |
Единственный безопасный вариант. Именно так и стоит делать.
А так в плане поиграться есть eval: alert( eval(1 + ' + ' + 3) ) |
Цитата:
|
ZNGR,
Чтобы без eval и вводить сложные формулы - Обратная польская запись, пост №14 |
Dilettante_Pro,
нажимаете (permalink) в нужном посте и вуаля http://javascript.ru/forum/showthrea...876#post405876 |
знаю 3 способа выполнить строку
1. eval 2. Function 3. Вставить <script> динамически Кто знает еще варианты? |
Безопасный eval:
http://blog.namangoel.com/replacing-...h-a-web-worker |
Эт забыл про 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)); |
Цитата:
var call = Function('a,b', 'return a + b'); alert(call(1, 2)); |
Цитата:
|
Часовой пояс GMT +3, время: 18:42. |