我正在学习JavaScript,我的一个挑战是不使用eval()函数来制作一个计算器。到目前为止,我做了输入,输入检查等,我得到一个数组,看起来像有点像这样numbers = ['-','1','+','2','*','3','+','(','5','/','2'comma','5',')','+','6'];
因为我还在学习,所以我不知道该从哪里走..我如何对这个字符串进行数学计算? (),*,/?中的计算优先级如何?我应该用什么技术来解决这个问题?我不想找到准备好去回答,我想自己写,我需要指导如何做到这一点:)从数组值和运算符计算
链接到我的当前代码在JSFiddle。到目前为止,我正在使用该字符串来显示按下的按键。
var rezult = "0";
var numberJoin = [];
function skaicius(symbol) {
numberJoin.push(symbol);
secondTolast = numberJoin[numberJoin.length - 2];
lastNumber = numberJoin[numberJoin.length - 1];
symbolswithoutComma = numberJoin.toString();
atsakymas = symbolswithoutComma.replace(/,/g, "");
atsakymas = atsakymas.replace(/comma/g, ",");
if (numberJoin[0] === "x" || numberJoin[0] === "+") {
numberJoin = [];
} else if ((symbol === "x" || symbol === "+" || symbol === "-") && (secondTolast === "x" || secondTolast === "+" || secondTolast === "-")) {
numberJoin.splice(numberJoin.length - 2, numberJoin.length - 1);
numberJoin.push(symbol);
} else if (symbol === "delete") {
numberJoin = [];
rezult = "0";
document.getElementById("rezult").innerHTML = rezult;
} else if (symbol === "=") {
} else {
document.getElementById("rezult").innerHTML = atsakymas;
}
}
编辑:EVAL()之类的东西的新功能( '返回-1 + 2 * 3 +(5/2,5)6')()都有点作弊的和因为我学习,我想尝试解决这个问题,而不会作弊:)
你需要共享代码的问题... –
工作小提琴:https://jsfiddle.net/arunpjohny/tmtLvfg8/29/ - 脚本在默认情况下加入到一个'onload'处理程序 –
谢谢你的意见并修复我的jsfiddle :) –