var
, let
, const
키워드를 사용합니다. let
과 const
는 ES6부터 도입된 키워드로, 블록 스코프(block scope)를 지원합니다.=
를 사용합니다. 기본형 데이터는 값이 복사되어 할당되고, 참조형 데이터는 메모리 주소가 복사되어 할당됩니다.Number
, String
, Boolean
, null
, undefined
, Symbol
(ES6), BigInt
(ES2020) 등이 있습니다.Object
, Array
, Function
, Date
, RegExp
등이 있습니다. 참조형 데이터는 객체의 형태를 가지며, 여러 속성이나 메소드를 포함할 수 있습니다.this
바인딩, 외부 환경 정보 등을 관리합니다.this
(정의, 활용방법, 바인딩, call, apply, bind)this
는 실행 컨텍스트의 한 부분으로, 현재 실행되고 있는 컨텍스트를 가리키는 식별자입니다.
활용 방법에는 객체의 메소드에서 객체 자신을 가리킬 때, 생성자 함수에서 새로 생성된 객체를 가리킬 때 등이 있습니다.
this
의 바인딩은 실행 컨텍스트가 생성될 때 결정됩니다. 하지만 call
, apply
, bind
메소드를 사용하여 this
의 바인딩을 명시적으로 변경할 수 있습니다.
call
메소드는 모든 함수에서 사용할 수 있으며, 첫 번째 인자로 this
로 사용할 객체를 받고, 이후 인자들은 호출할 함수의 인자로 사용됩니다.apply
메소드는 call
메소드와 유사하지만, 함수의 인자들을 배열로 받습니다.bind
메소드는 함수의 this
값을 영구히 바꿀 수 있는 새로운 함수를 생성합니다.나이든 객체 문제
var user = {
name: "john",
age: 20,
}
var getAged = function (user, passedTime) {
var newUser = {...user}; // 새로운 객체를 생성하고, 기존 사용자 정보를 복사
newUser.age += passedTime; // passedTime을 현재 나이+
return newUser;
}
var agedUser = getAged(user, 6);
var agedUserMustBeDifferentFromUser = function (user1, user2) {
if (!user2) {
console.log("Failed! user2 doesn't exist!");
} else if (user1 !== user2) {
console.log("Passed! If you become older, you will be different from you in the past!")
} else {
console.log("Failed! User same with past one");
}
}
agedUserMustBeDifferentFromUser(user, agedUser);
var fullname = 'Ciryl Gane'
var fighter = {
fullname: 'John Jones',
opponent: {
fullname: 'Francis Ngannou',
getFullname: function () {
return this.fullname;
}
},
getName: function() {
return this.fullname;
},
getFirstName: () => {
return this.fullname.split(' ')[0];
},
getLastName: (function() {
return this.fullname.split(' ')[1];
})()
}
console.log('Not', fighter.opponent.getFullname(), 'VS', fighter.getName());
console.log('It is', fighter.getName(), 'VS', fighter.getFirstName(), fighter.getLastName);
51-62e70ec8d0cf47c2.js:1 Not Francis Ngannou VS John Jones
51-62e70ec8d0cf47c2.js:1 It is John Jones VS Ciryl Gane