다음 배열이 있습니다.문자열 배열의 자바 스크립트 산술 연산자
위의 각 기호를 배열에 추가하려면 다음 변수를 사용하십시오.
var right_digit = 1;
var left_digit = 5;
JS에서 다음과 같은 작업을 수행 할 수 있습니까?
var answer = left_digit sign[0] right_digit;
다음 배열이 있습니다.문자열 배열의 자바 스크립트 산술 연산자
위의 각 기호를 배열에 추가하려면 다음 변수를 사용하십시오.
var right_digit = 1;
var left_digit = 5;
JS에서 다음과 같은 작업을 수행 할 수 있습니까?
var answer = left_digit sign[0] right_digit;
당신이 평가 피하고 싶은 경우에 당신은 같은 것을 수행 할 수 있습니다
var signs = {
'+': function(op1, op2) { return op1 + op2; },
...
};
var answer = signs['+'](left_digit, right_digit);
을
저는이 방법을 사용할 것입니다. – Neutralizer
동적 그런 식으로 운영을 평가하려는 경우가 eval
를 사용할 수 있습니다
var answer = eval(right_digit + sign[0] + left_digit);
주 평가 '의 사용이 때문에 potentional 보안 문제로 그렇게하지 않는 것이 좋습니다 (데이터가 신뢰할 수없는 경우) 실행될 때마다 코드를 분석해야하므로 속도가 느립니다.
더 좋은 방법은이 같은 switch
을 사용하는 것입니다 :
function calculate(a, operator, b) {
switch (operator) {
case "+":
return a + b;
case "-":
return a - b;
case "*":
return a * b;
case "/":
return a/b;
}
}
var answer = calculate(right_digit, sign[0], left_digit);
@AlienWebguy * 가능성 * 중 하나인데 권장하지 않습니다. – Lekensteyn
내 의견을 말할 때 공평하게 말하면, 'eval()'이 당신의 대답의 전부입니다;) – AlienWebguy
당신은 평가를 사용 할 수 있습니다
var answer = eval(left_digit + sign[0] + right_digit);
나는 이것을 할 수 없다고 확신하지만, 그렇게하는 기능을 만들 수있다.
function action(a, b, c) {
switch (c) {
case "+":
return a+b;
case "-":
return a-b;
case "*":
return a*b;
default:
return a/b;
}
}
안전한 eval
솔루션 (숫자를 필터링하고 서명하고, 그 형식이 아닌 경우 오류가 발생합니다) :
function calculate(expr) {
var matches = /^(\d+)([+\-*/])(\d+)$/.exec(expr);
if(!matches) {
throw "Not valid";
}
return eval(matches[1] + matches[2] + matches[3]);
}
calculate('2*4'); // 8
그래서 당신이 할 수 있습니다
calculate(left + sign + right);
왜 그걸하고 싶니? 그러한 모든 구현은'1 + 5'보다 느립니다. –
그것은 임의로 기호를 선택해야하는 게임입니다. – Neutralizer