eval(); //이 방법은 권장되지 않습니다
JSON.parse(); //권장 방법
1. 두 방법의 차이점
먼저 json 형식으로 객체를 초기화합니다.
var jsonDate = '{ "name":"周星驰","age":23 }' var jsonObj = eval( '(' + jsonDate + ')' ); // eval();方法 var jsonObj = JSON.parse( jsonDate ); // JSON.parse(); 方法
그런 다음 콘솔에서 호출하세요.
console.log( jsonObj.name ); // 두 방법 모두 올바르게 입력 가능합니다. Stephen Chow
그렇다면 두 방법의 차이점이 무엇인지 궁금합니다. (아래 코드를 살짝 바꾸자, 파란색 글씨가 수정된 부분입니다)
var jsonDate = '{ "name":alert("hello"),"age":23 }' var jsonObj = eval( '(' + jsonDate + ')' ); // eval();方法 console.log( jsonObj.age ); //会先执行“alert”输出“hello” 然后才输出 23
"JSON.parse();" 메소드 교체:
var jsonDate = '{ "name":alert("hello"),"age":23 }' var jsonObj = JSON.parse( jsonDate ); // JSON.parse(); 方法 cosole.log( jsonobj.age ) // 报错 这个错误告诉我们这个字符串是不合法的
요약: "eval();" 메서드는 구문 분석 시 문자열이 유효한지 여부를 판단하지 않으며, json 개체의 js 메서드도 실행되므로 매우 위험합니다. "이 방법의 장점은 말할 필요도 없이 이 방법을 추천합니다. (이해하지 못하는 친구들은 콘솔에서 직접 테스트해볼 수 있습니다)
2. 확장 문제
위 테스트에서 중괄호 밖의 따옴표가 빨간색으로 표시되어 있는 것을 볼 수 있습니다. 이 따옴표 쌍은 매우 중요하지만 "eval();" 및 "JSON .parser" 때문에 종종 무시됩니다. ();" 이 두 메소드의 매개변수는 문자열만 허용합니다. 즉, 문자열만 구문 분석할 수 있습니다!!
그렇다면 초기화할 때 따옴표를 추가하지 않으면 그 자체가 객체이고 js는 객체 자체의 속성과 메서드를 직접 얻을 수 있다는 생각이 듭니다. 그런 다음 "eval();" 또는 "JSON.parse();"를 사용하여 문자열을 구문 분석하는 것이 환경 친화적이지 않습니까?
이유는 매우 간단합니다. 프런트엔드는 백엔드에 문자열 데이터 형식만 제공할 수 있습니다. 백엔드가 프런트엔드로 반환하는 내용은 반환되는 데이터 형식에 따라 다릅니다. 사용하기 전에 구문 분석해야 합니다.
(일반적으로 다들 무시하고 크게 관심을 두지 않는 작은 문제입니다. 제가 궁금한 이유는 제가 백엔드에 대해 잘 모르기 때문입니다. 백엔드에 대해 잘 모르고 어떻게 작동하는지 아는 친구들에게 도움이 될 것입니다. 사건 이후 자연스럽게 기억이 깊어질 것이므로 개발 과정에서 놓치지 않을 것입니다.)
위 내용은 이 글의 전체 내용입니다. 모두 마음에 드셨으면 좋겠습니다.