오늘은 json 문자열을 파싱하는 방법과 eval() 메서드를 사용하는 방법을 배웠습니다. 문자열을 파싱할 때 왜 괄호를 추가해야 하나요? 어찌할 바를 모르는. JavaScript의 {} 문 블록은 모호하며, 괄호를 추가하지 않으면 오류가 발생한다는 사실이 밝혀졌습니다. 이 모호함을 이해하는 것은 JavaScript 코드를 이해하는 데 큰 도움이 됩니다.
1. {} 문 블록의 두 가지 의미
은 명령문 블록을 나타냅니다
a. {}를 사용하여 자바스크립트로 코드를 묶어 편집기에서 코드 관리를 용이하게 할 수 있습니다. JavaScript에는 블록 수준 범위가 없으므로 이 접근 방식은 무해합니다.
{ //some code... }
b. JavaScript에서는 조건문, 루프 문 및 함수 모두 코드를 통합하기 위해 {} 문 블록이 필요합니다
객체 리터럴
var box = { name:'kuoaho', age:21 }
//이때 [code]는 표현식으로 사용되며 변수에 대입 가능합니다
//사실 객체 리터럴은 객체 값을 생성할 수 있는 표현식입니다
2. 객체 리터럴을 할당 표현식으로 사용하지 않으면 어떻게 되나요?
예:
{name:'kuoao'} //没有报错,但是也没有创建对象 {name:'kuohao',age} //报错
위에서 볼 수 있듯이 객체 리터럴은 표현식으로만 할당할 수 있습니다. 첫 번째 작성 방법에는 문제가 없지만 JavaScript에서는 이를 label 문으로 구문 분석합니다.
분석:
{name:'kuoao'} //{}一个语句块 // name:'kuohao',一个label语句,用于标记for循环
3. 그런데 또 문제가 옵니다...
{ name:'kuohao', age:21 }
//왜 오류가 발생하나요? 이것이 객체 리터럴이 작성되는 방식이 아닌가요?
JavaScript에서 {}의 모호성으로 인해 {}는 객체 리터럴일 뿐만 아니라 코드 블록으로도 간주됩니다.
analysis: { name:'kuohao', age:21 }
코드 블록, 두 개의 레이블 문, 쉼표가 없으면 전혀 문제가 없으므로 핵심은 쉼표로 두 문을 구분해야하므로 JavaScript는 이것이 구문인지 판단합니다. 오류
4. 올바른 글쓰기
({ name:'kuohao', age:21 }) //正确的写法
()는 명령문을 명령문 표현식이라고 하는 표현식으로 변환합니다. 객체 리터럴은 표현식이 아닌가요? 변환하려면 왜 ()가 필요합니까?
괄호를 추가하면 이 모호함이 제거될 수 있습니다. 괄호 안의 코드가 표현식 평가로 변환되어 반환되므로 명령문 블록은 객체 리터럴이 되고 객체 리터럴은 다음과 같이 존재해야 한다고 결론을 내릴 수도 있습니다. 표현