这里有新鲜出炉的 Javascript 教程,程序狗速度看过来!
Javascript 是一种由 Netscape 的 LiveScript 发展而来的原型化继承的基于对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言,比如 Perl,遗留的速度问题,为客户提供更流畅的浏览效果。
js 表达式计算器代码,需要的朋友可以参考下。
效果图:
代码:
[Ctrl+A 全选 注:
- <script type="text/javascript">
- // <![CDATA[
- String.prototype.trim = function() {
- return this.replace(/^\s+/, '').replace(/\s+$/, '');
- };
- function calc() {
- var expression = document.getElementById("txtExpression").value;
- try {
- document.getElementById("txtResult").innerText = '计算结果为:' + calcBasic(calcComplex(expression));
- } catch(e) {
- document.getElementById("txtResult").innerText = e.message;
- }
- }
- function calcComplex(complexExpression) {
- var arr = new Array();
- var left = 0;
- var right = 0;
- for (var i = 0; i < complexExpression.length; i++) {
- if (complexExpression.charAt(i) == '(') {
- arr.push(i);
- left++;
- }
- if (complexExpression.charAt(i) == ')') {
- arr.push(i);
- right++;
- }
- }
- if (left != right) {
- throw new Error('括号不匹配!', '2');
- }
- var brackets = complexExpression.replace(/[^\(|^\)]/g, '');
- for (i = 0; i < brackets.length; i++) {
- if (brackets.charAt(i) == "(" && brackets.charAt(i + 1) == ")") {
- var simpleExpression = complexExpression.substr(arr[i] + 1, arr[i + 1] - arr[i] - 1);
- if (calcBasic(simpleExpression) < 0) {
- complexExpression = complexExpression.substr(0, arr[i]) + '[' + Math.abs(calcBasic(simpleExpression)) + '' + complexExpression.substr(arr[i + 1] + 1);
- } else {
- complexExpression = complexExpression.substr(0, arr[i]) + '' + calcBasic(simpleExpression) + '' + complexExpression.substr(arr[i + 1] + 1);
- }
- complexExpression = calcComplex(complexExpression);
- break;
- }
- }
- return complexExpression;
- }
- function calcBasic(baseExpression) {
- if (baseExpression.charAt(0) == '-') {
- baseExpression = '[' + baseExpression.substr(1);
- }
- var constants = baseExpression.trim().replace(/[\*|\/|\+|\-]/g, ' ').split(/\s+/g);
- for (var index in constants) {
- //只留下符号
- baseExpression = baseExpression.replace(/\s+/g, '').replace(constants[index], '');
- //将提取的常量字符串转化为数字
- var item;
- if (constants[index].trim().charAt(0) == '[') {
- item = parseFloat(constants[index].trim().replace('[', '-'));
- } else {
- item = parseFloat(constants[index].trim());
- }
- if (isNaN(item)) {
- throw new Error('存在非法符号!', '0');
- } else {
- constants[index] = item;
- }
- }
- if (constants.length != baseExpression.length + 1) {
- throw new Error('表达式有误!', '1');
- }
- for (var i = 0; i < baseExpression.length; i++) {
- switch (baseExpression.charAt(i)) {
- case '*':
- constants.splice(i, 2, constants[i] * constants[i + 1]);
- baseExpression = baseExpression.replace('*', '');
- i -= 1;
- break;
- case '/':
- if (constants[i + 1] == 0) {
- throw new Error('除数不能为0!');
- }
- constants.splice(i, 2, constants[i] / constants[i + 1]);
- baseExpression = baseExpression.replace('/', '');
- i -= 1;
- break;
- default:
- break;
- }
- }
- for (var j = 0; j < baseExpression.length; j++) {
- switch (baseExpression.charAt(j)) {
- case '+':
- constants.splice(j, 2, constants[j] + constants[j + 1]);
- baseExpression = baseExpression.replace('+', '');
- j -= 1;
- break;
- case '-':
- constants.splice(j, 2, constants[j] - constants[j + 1]);
- baseExpression = baseExpression.replace('-', '');
- j -= 1;
- break;
- default:
- break;
- }
- }
- return constants[0];
- }
- // ]]>
- </script>
- </p>
- <div>
- <textarea id="txtExpression" style="width: 90%; height: 200px; overflow-y: visible;">
- </textarea>
- <div>
- <input id="btnSubit" type="button" onclick="calc()" value="计算" />
- </div>
如需引入外部 Js 需刷新才能执行
]来源: http://www.phperz.com/article/17/0625/282521.html