Today I Learned
호이스팅
변수 선언은 최상위에 선언된 것 처럼 행동
예시:
console.log(test);
var test = "hello world";
결과
undefined
왜냐면 호이스팅되면서
var test;
console.log(test);
test = "hello world";
라는 형식으로 나오기 때문이다.
함수 스코프
var, let, const
let과 const를 쓰기를 권장. es6부터 나옴.
var는 함수스코프.
function test() {
var abc = "hellow world";
}
console.log(abc);
에러가 난다.
왜냐면 var는 함수내에서만 작동 (지역변수)
근데 함수밖에 선언하면 글로벌변수로 작동
let, const는 블록 스코프라고 함.
함수, if, while, for, try/catch 등의 모든 코드 블록 안에서 선언한 변수는 코드 블록 내에서만 유효.
코드 블록외부에서는 참조 불가능.
let foo = 123; // 전역 변수
{
let foo = 456; // 지역 변수
let bar = 456; // 지역 변수
}
console.log(foo); // 123
console.log(bar); // ReferenceError: bar is not defined
출처: https://poiemaweb.com/es6-block-scope
아래를 computed property라고 함.
const user = {
["my "+"age"] : 23,
[1+5] : 6
}
객체 유용한 함수
Object.assign(): 객체 복제를 한다
const newUser = Object.assign({}, user);
<< -- 그대로 복제, {}안에 key: val 형식으로 넣으면 중복되지않으면 속성을 하나 추가하는거고 같은 이름이면 덮어쓴다.
let n = "name";
let a = "age";
const user = {
[n]: "Mike", // 변수를 키값으로 사용하는법 -> [] 를 붙인다.
[a]: 30,
};
function makeObject(key, val) {
return {
[key]: val
};
}
const obj = makeObj("성별", "male");
var arr = [
"바보, ㅋㅋ",
"천재, ㅎㅎ"
];
const result = Object.fromEntries(arr); <-- 배열을 객체로 만들어줌
따옴표 활용
', "", `
html코드면 중간에 ㄷ큰따옴표가 많으니까 홑따옴표로 감싸는게 편하다.
영어 문자열이면 중간에 홑따옴표들어가니까 큰따옴표로 감싸는게 편하다.
백틱은 중간에 변수를 넣거나 표현식을 넣을수있다.
백틱은 여러줄을 넣을수있다.
var myAge = 24;
var a = `안녕 내 나이는 ${3+5}살이야.`
var b = `안녕 내 나이는 ${myAge}살이야.`