코딩앙마님의 자바스크립트 중급강좌 몰아보기 140분.
길어서 #2, #3 으로 나눠서 작성해야겠다.
글로도, 머릿속에도 잘 정리해두자.
var name = ‘Mike’;
var name = ‘jane’;
2) var는 선언하기 전에 사용할 수 있다. (호이스팅)
단, 선언은 호이스팅되지만, 할당은 호이스팅되지 않는다.
var name;
console.log(name); // undifined
name = ‘Mike’; // 할당
** TDZ (Temporal Dead Zone)
직역하면 일시적 사각지대.
let, const는 var와 달리 선언과 초기화가 별도로 이루어진다. 이때, 선언 단계와 초기화 단계 사이를 TDZ라고 부른다. 초기화 단계와 할당 단계는 이후에 진행되기 때문에 TDZ에 있는 변수를 찾을 경우, 에러가 발생한다.
** 스코프 (Scope)
-var : 함수 스코프(function-scoped)
-let, const : 블록 스코프(block-scoped) // 함수, if문, for문, while문, try/catch문 등..
var
1) 선언 및 초기화 단계 : 초기화, undifined를 할당하는 단계
2) 할당 단계
let
1) 선언 단계 (-> 호이스팅됨)
2) 초기화 단계 (-> 실제 코드에 도달했을 때)
3) 할당 단계
const
1) 선언 + 초기화 + 할당
비슷한 객체를 여러개 만들어야 하는 상황일 때 사용한다.
let user = {
name : ‘Mike’
age. : 30
}
function User(name, age) {
this.name = name;
this.age = age;
}
let user1 = new User(‘Mike’, 30);
let user2 = new User(‘Janne’, 22);
let user3 = new User(’Tom’, 17);
function User(name, age) {
// b. 객체를 만들고 this에 할당한다. — 실제코드에 없는 부분
// this = {}
// c. 함수 본문을 실행하면서 this에 프로퍼티들을 추가한다.
this.name = name;
this.age = age;
// d. this를 반환한다. — 실제코드에 없는 부분
// return this;
}
new 함수명() ; // a. 실행
Object.assign({ color : ‘blue’ }, user):
-초기값에 기존에 있는 프로퍼티를 넣게되면 덮어 쓰게된다.
-병합이 가능하다.
const user = {
name : ‘Mike
}
const info1 = {
age = 30
}
const info2 = {
color : ‘blue’
}
object.assign(user, info1, info2);
const user = {
name : ‘Mike’
age. : 30
}
object.keys(user); // [“name”, “age”]
const user = {
name : ‘Mike’
age. : 30
}
Object.values(user); // [“Mike”, “30”]
const user = {
name : ‘Mike’
age. : 30
}
Object.entries(user); // [“name”, “Mike”] , [“age”, “30”]
const arr =
[
[“name”, “Mike”],
[“age”, 30]
];
Object.fromEntries(arr);
// ** 결과 **
// {
// name : ‘Mike’,
// age : 30
// }
let a = ‘age’;
const user = {
name : ‘Mike’,
[a] : 30 // 변수 a에 할당된 값이 들어옴
const test = {
[1 +4] : 5,
[“안녕”+”하세요”] : “Hello”
}
// 식 자체를 넣는것도 가능하다.
property key : 객체 프로퍼티는 문자열도 가능하지만 Symbol도 가능하다.
Symbol은 유일한 식별자 이다. new를 사용하지 않는다.
const a = Symbol();
const b = Symbol();
console.log(a)
Symbol()
console.log(b)
Symbol()
a === b; (false)
a == b; (false)
const id = Symbol(‘id’);
const user = {
name : ‘Mike’,
age : 30,
[id] : ‘myid’
}
user // { name : “Mike”, age : 30, Symbol(id) : “maid”}
user[id] // “mid”
Object.keys(user); // [“name, “age”]
Object.values(user); //[“Mike”, 30]
const id1 = Symbol.for(‘id’);
const id2 = Symbol.for(‘id’);
id1 === id2; // true
-이름을 얻을 때에는 keyFor를 사용한다.
Symbol.keyFor(id1) // 생성할 때 적었던 id1의 이름을 알려준다 “id”
-전역심볼이 아닐 경우에는 description으로 알 수 있다.
const id = Symbol(‘id 입니다’);
id.description; // “id 입니다.”
-Object.getOwnPropertySymbols(); : 심볼들만 볼 수 있다.
Object.getOwnPropertySymbols(user); // [Symbol(id)]
-Reflect.ownKeys(); : 심볼을 포함한 모든 키를 보여준다.
Reflect.ownKeys(user); // [“name”, “age”, Symbol(id)]
Math.pow(2, 10); // 1024
Math.sqrt(16); // 4
let desc = `맑고
화창한 날씨 입니다.`;
// 백틱은 개행을 별도로 표기하지 않아도됨.
let desc = ‘맑고\n화창한 날씨 입니다.’;
// 홑따옴표는 한 행에 몰아써야함. 개행 또한 불가능
let desc = ‘안녕하세요.’;
desc[2] // ‘하’
let desc = “abcdefg”
desc.slice(2); // “cdefg”
desc.slice(0,5); // “abcde”
desc.slice(2,-2). //. “cde”
let desc = “abcdefg”
desc.substr(2,4); // “cdef”
desc.substr(-4,2). // “de”
정리는 했지만 까먹거나 안쓰면 안한거나 다름이 없다. 유용한 메서드는 기억했다가 제때제때 잘 활용하자..!
공부자료 : 자바스크립트 중급 강좌: 140분 완성 / TDZ 개념 참고 블로그