객체리터럴-JSON, 정규표현식리터럴
- 퍼블리셔/javascript
- 2014. 5. 31. 06:00
JSON
JSON(JavaScript Object Notation)의 준말로, 데이터 전송 형식의 일종이다. JSON 의 예.
{"name": "value", "some": [1, 2, 3]};
JSON에서는 프로퍼티명를 따옴표로 감싸야 한다는 점이 객체 리터럴과의 유일한 문법적 차이다.
객체 리터럴은 프로퍼티명이 식별자로서 유효하지 않은 경우에만 따옴표가 필요하다.
즉 {"first name": "Dave"} 에서처럼 프로퍼티명에 공백문자가 포함되었다면 따옴표로 가싸주어야 한다.
JSON 문자열에는 함수나 정규식 리터럴을 사용할 수 없다.
JSON 다루기
JSON 문자열을 평가하면 보안 문제가 있을 수 있기 때문에 JSON.parse()를 이용하는 것을 권장한다.
// 입력되는 JSON 문자열
var jstr = '{"mykey": "my value"}';
// 안티패턴
var data = eval('(' + jstr + ')');
// 권장안
var data = JSON.parse(jstr);
console.log(data.mykey); // "my value"
JSON.parse() 매서드의 반대는 JSON.stringify() 다.
이 메서드는객체 또는 배열(또는 원시 데이터 타입)을 인자로 받아 JSON 문자로 직렬화한다.
var dog = {
name: "Fido",
dob: new Date(),
legs: [1, 2, 3, 4]
};
var jsonstr = JSON.stringify(dog);
// jsonstr 값은 다음과 같다.
// {"name": "Fido", "dob":"2010-04-11T22:36:22.436Z","legs":[1,2,3,4]}
정규표현식 리터럴
자바스크립트에서 정규식을 생성하는 방법은 두가지다.
- new RegExp() 생성자를 사용한다.
- 정규식 리터럴을 사용한다.
역슬래시() 하나에 매치되는 예제
// 정규식 리터럴
var re = /\\/gm;
// 생성자
var re = new RegExp("\\\\", "gm");
즉 정규표현식보다는 정규표현식 리터럴을 쓰는것이 더 간단하고 쉽다.
정규 표현식 리터럴 문법
정규식 리터럴 표기법은 매칭에 사용되는 정규식 패턴을 슬래시로 감싼다.
두번째 슬래시 뒤에는 따옴표 없이 문자 형태의 변경자를 둘수 있다.
정규식 리터럴과 생성자의 또다른 차이점으로는 정규식 리터럴의 경우 파싱될때 단 한번만 객체를 생성한다는 점을 들수 있다.
루프 안에서 동일한 정규식을 생성하면 이미 생성된 객체가 반환되며, lastIndex 등 모든 프로퍼티는 최초에 설정된 상태를 이어받는다.
다음 예제는 동일한 객체가 두번 반환되는 과정을 보여준다.
function geRE() {
var re = /[a-z]/;
re.foo = "bar";
return re;
}
var reg = getRE(),
re2 = getRE();
console.log(reg === re2); // true
reg.foo = "baz";
console.log(re2.foo); // "baz"
마지막으로 덧붙이자면, new
를 빼먹고 RegExp()
를 호출해도 (즉 생성자가 아니라 함수처럼 호출해도) new와 함께 호출한 것처럼 동작한다.
출처 : JavaScript Patterns