일급 객체인 Javascript를 완벽하게 이해하기 위해서는 객체와 함수에 대한 충분한 지식과 이해가 요구된다. 가장 처음으로 알아야 하는 것은 객체라고 생각한다!
: 원시 값을 제외한 나머지 값(function
, array
, 정규 표현식 등)은 모두 객체라고 볼 수 있다. 원시 타입(primitive type)은 변경 불가능(immutable value)한 단 하나의 값이지만, 객체 타입(object/reference type)은 다양한 타입의 값을 하나의 단위로 구성한 복합적인 자료구조이면서, 변경 가능한 값(mutable value)을 갖는다.
: 객체는 0개 이상의 프로퍼티로 구성된 집합으로, 프로퍼티는 키(key)와 값(value)으로 구성된다.
let today = {
weather : "맑음",
date : 24
}
객체 이름 :
today
프로퍼티 :{ weather : "맑음", date : 24 }
프로퍼티의 키 :weather, date
프로퍼티의 값 :"맑음", 24
: JS에서의 모든 값은 프로퍼티의 값이 될 수 있고, JS의 함수는 일급 객체이기 때문에 함수를 프로퍼티 값으로 이용할 수 있다. 프로퍼티의 값이 함수인 경우를 메서드(method)라고 부른다.
var counter = {
num : 0, //프로퍼티
increase : function() { //메서드
this.num++
}
프로퍼티와 메서드에 관한 자세한 내용은 여기!!
프로토타입 기반 객체지향 언어인 Javascript
는 객체 리터럴, Object 생성자 함수, 생성자 함수, Object.create 메서드, 클래스(ES6) 등의 다양한 객체 생성 방법을 지원하지만 가장 일반적으로 사용하는 것은 객체 리터럴이다.
let weather = {
predict : "흐림",
broadcast : function() {
console.log(`내일의 날씨는 ${this.predict}으로 예상됩니다.`);
}
};
console.log(typeof weather) //object
console.log(weather) //{ predict: '흐림', broadcast: [Function: broadcast] }
객체 이름 :
weather
프로퍼티 : 1개 ( 키 :predict
, 값 :"흐림"
)
메서드 : 1개 ( 키 :broadcast
, 값 :function
)
객체 리터럴은 중괄호{}
내에 0개 이상의 프로퍼티를 정의하고, 중괄호 내에 프로퍼티를 정의하지 않으면 빈 객체가 생성된다.
const empty = {}; //빈 객체 생성 후 변수에 할당함
console.log(empty); //{ }
console.log(typeof empty); //object
결론부터 말하자면 객체의 중괄호는 코드 블럭을 의미하는 것이 아니다. 객체 리터럴은 표현식이기 때문에 닫는 중괄호 뒤에 세미콜론;
을 붙이지만, 코드 블록의 닫는 중괄호 뒤에는 붙이지 않는다.
function repeat(input) { //함수의 중괄호는 코드 블록을 의미함
console.log(input);
} //; 생략 가능
let clock = { //객체의 중괄호는 표현식을 의미함
hours : 6,
mins : 30
}; //; 생략 불가능
하지만 실제로 실행해보면 세미콜론;
의 여부와 상관없이 정상적으로 실행된다 ...
Ref.
모던 자바스크립트 Deep Dive : 자바스크립트의 기본 개념과 동작 원리
잘하시네여.. 한 수 배우고 갑니다..