조건문에 대한 입력으로 문자열을 가져 오는 좋은 방법을 찾으려고하여 배열을 반복하여 조건 목록을 확인할 수 있습니다. 기본적으로 다음과 같이 할 수 있는지 궁금합니다.
// Would check if foo is equal to one, bar is true, and et is a string containing 'cetera'
var conditions = ["foo==1","bar==true","bar","et=='cetera'"];
for (var i=0;i<conditions.length;i++) {
if (conditions[i]) { console.log("Do stuff..."); }
}
을 (를) 생각 eval
했지만 보안 위험이 있는지 궁금합니다. 이 코드에있는 파일은 PHP 나 서버 소프트웨어를 사용하지 않지만 실행되는 호스트에는 서버 소프트웨어가 있으며 피해야할지 모르겠습니다.
그냥 문자열을 버리십시오.
var conditions = [foo == 1, bar == true, bar, et == 'cetera'];
for (var i=0;i<conditions.length;i++) {
if (conditions[i]) {
console.log("Do stuff...");
}
}
이것은 conditions
많은 부울 값으로 채워집니다 . 그런 다음 해당 항목이 사실인지 확인하기 위해 반복 할 수 있습니다.
편집 : 조건이 참일 때마다 "Do stuff ..."가 인쇄됩니다. 따라서 foo == 1
가 true이고 et == "cetera"
이면 "Do stuff"가 두 번 인쇄됩니다. 그것이 당신이 원하는 것이 아니라면 다음 any
과 같은 함수 를 정의 하십시오.
function any(arr) {
for (var i = 0; i < arr.length; ++i) if (arr[i]) return true;
return false;
}
그런 다음 사용할 수 있습니다. if (any(conditions)) console.log("Do something...");
편집 2 :conditions
확인하기 전에 초기화 하는 경우 (값이 변경 될 수 있음) 함수에서 각각을 래핑합니다 (더 많은 타이핑이지만). 예를 들면 다음과 같습니다.
var conditions = [
function() { return foo == 1; },
function() { return bar == true; }
// and so on...
];
마찬가지로 다음으로 변경 if (conditions[i]) { console.log("Do stuff..."); }
해야합니다.if (conditions[i]()) { console.log("Do stuff..."); }
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다