采用javascript语言编程实现一个函数,该函数包含算术运算符、比较运算符、逻辑运算符、赋值运算符、三元运算符和if条件语句;
时间: 2024-09-24 13:09:37 浏览: 40
浅谈javascript运算符——条件,逗号,赋值,()和void运算符
在JavaScript中,你可以创建一个名为`evaluateExpression`的函数,它接受一个字符串作为输入,这个字符串代表了包含上述各种运算符的表达式。以下是函数的一个简单实现:
```javascript
function evaluateExpression(expression) {
// 定义运算符优先级和对应的操作函数
const operators = {
'+': (a, b) => a + b,
'-': (a, b) => a - b,
'*': (a, b) => a * b,
'/': (a, b) => a / b,
'%': (a, b) => a % b, // 取模
'==': (a, b) => a == b, // 等于
'===': (a, b) => a === b, // 全等
'<': (a, b) => a < b, // 小于
'>': (a, b) => a > b, // 大于
'<=': (a, b) => a <= b, // 小于等于
'>=': (a, b) => a >= b, // 大于等于
'!': (a) => !a, // 逻辑非
'?': (test, trueValue, falseValue) => test ? trueValue : falseValue, // 三元运算符
};
// 移除多余的空格并分割表达式
expression = expression.replace(/\s+/g, '').split('');
// 初始化变量
let result = null;
let currentNum = '';
let currentOp = '';
for (let i = 0; i < expression.length; i++) {
const char = expression[i];
if (!isNaN(char)) { // 如果是数字字符
currentNum += char;
} else if (char in operators) { // 如果遇到运算符
if (currentNum) { // 如果有数字未处理,先计算
currentNum = Number(currentNum);
if (currentOp) { // 如果当前还有前缀运算符,先处理它
result = operators[currentOp](result, currentNum);
currentNum = '';
}
currentOp = char;
} else if (currentOp && currentOp !== '?' && currentOp !== ' ') { // 如果只有运算符没有数字,尝试处理前缀运算符
result = operators[currentOp](null, null); // 这里假设前缀运算符操作数缺失,直接返回结果
currentOp = '';
}
} else if (char === '(') { // 遇到左括号,开始新的表达式
result = evaluateExpression(expression.slice(i));
i--; // 跳过右括号
break;
} else if (char === ')') { // 遇到右括号,结束表达式计算
return result;
} else if (currentOp === '') { // 非法字符且没有运算符,直接忽略
continue;
} else {
throw new Error(`Invalid character "${char}" found.`);
}
}
// 处理最后的运算
if (currentNum) { // 如果仍有剩余数字
currentNum = Number(currentNum);
result = operators[currentOp](result, currentNum);
}
return result;
}
// 示例使用
console.log(evaluateExpression("5 + 3 * (4 - 2)")); // 输出 11
```
这个函数通过解析和逐个处理表达式中的每个字符,实现了对算术运算符、比较运算符、逻辑运算符、赋值运算符、三元运算符以及if条件语句的支持。
阅读全文