https://www.youtube.com/watch?v=4_WLS9Lj6n4&t=62s
코딩앙마 자바스크립트 중급 강좌
var는 한번 선언된 변수를 다시 선언할 수 있다.
같은 상황에서 let, const는 불가하다.
var는 선언하기 전에 사용할 수 있다.(호이스팅)
undefined 뜨는 이유:
var 선언은 호이스팅 되지만 할당은 호이스팅 되지 않는다.
호이스팅 스코프 내부 어디서든 변수 선언은 최상위에 선언된 것처럼 행동한다.
let과 const는 호이스팅 되지만 Temporal Dead Zone에 영향을 받습니다.
그래서 할당이 되어야지만 사용할 수 있다.
변수의 생성과정 3가지
초기화는 undefined를 할당해주는 단계를 의미한다.
선언단계 호이스팅
초기화 단계는 실제 코드에 도달했을 때 이루어짐
초기화 진행전에 console.log를 찍으면 ReferenceError: x is not defined라는 오류가 뜬다
할당단계
재할당은 가능하지만, 재선언은 불가하다
재할당 x 재선언 x
const gender
gender = "male"; 하면 오류가 생긴다
왜냐하면 동시에 선언 초기화 할당이 이루어지기 떄문이다.
변수를 선언할 경우 선언과 초기화 할당을 동시에 해야 오류가 나지 않는다.
(동시에 이루어지기 때문에 재할당이 불가하다.)
스코프
var
: 함수 스코프(function-scoped)
함수 내에서 선언하면 지역 변수가 된다.
let, const
: 블록 스코프(block-scoped)
코드 블록 내에서 선언하면 블록 안에서만 쓸 수 있다.
외부에서 접근 불가하다.
객체 리터럴
동일한 객체를 만들어야하는 상황에서 생성자 함수를 이용한다.
생성자함수는 첫글자를 대문자를 사용해야함
function User(name, age){
this.name = name;
this.age = age;
}
let user1 = new User('mike, 30);
let user1 = new User('jane, 22);
user1
-> user {name: 'mike", age: 30}
-> user {name: 'jane", age: 22}
Object.assign() : 객체 복제
const user = {
name: 'mike',
age: 30
}
const cloneUser = user;
(참조값 복사, 복사한 cloneUser 값을 변경하면 기존의 user도 변경되어진다. )
![](https://velog.velcdn.com/images/wns450/post/1fe774a2-2a21-48fa-bd91-3b05e8155523/image.png)
올바르게 참조값이 아닌 복사를 하고 싶다면 const newUser = Object.assign({}, user);
{ name : 'Mike', age: 30,}
이쁘게 객체가 복사된다
만약에 const newUser = Object.assign({ name: TOM, }, user)
Object.keys(user); 키만 뱉는다.
Object.values(user); 값만 뱉는다.
Object.entries(user)
키와 배열을 같이 뱉는다.
Object.fromEntries(arr); 배열들을 객체로 만든다.
Symbol : 유일성 보장
toString()
10진수 -> 2진수/16진수
let num = 10;
num.toString(); // "10"
num.toStirng(2); // "1010" 2진수
let num2 = 255;
num2.toString(16); // "ff" 16진수
ceil() : 올림
Math.ceil(5.1); // 6
round() : 반올림
Math.round(5.1); // 5
let Num3 = 30.1234;
소수 둘째자리까지 표현해라
NUM3 X 100 하면 3012.3 이 되어서 라운드를 이용하고 그 이후에
다시 돌려놓으면 된다.
Math.round(Num3*100)/100 //30.12
toFixed()
isNaN
오직 NaN만 판독해줌
isNaN(NaN) true
나머지는 다 false
Parseint() 문자 속 숫자 추출하기
중요한 것은 첫 시작이 숫자인가? 가 중요하다.
16진법 2진법도 가능하다
ParseInt(redColor, 16); // 243
ParseInt('11', 2); //3
parseFloat(18.5%); 18.5
Math.random()
0~1 사이 무작위 숫자 생성
Math.max(1,2,3); //3 최대값
Math.min(1,2,3); // 1 최소값
Math.abs(-1) //1 절대값
Math.pow(2,10); 1024 2의 10제곱
Math.sqrt(16) //4 제곱근
String
let text = '안녕하세요
반갑습니다'
let text = '안녕하세요 \n 반갑습니다'
\n은 줄바꿈을 의미
text.length 길이
text[2] // 하
toUpperCase() /대문자
toLowerCase() /소문자
str.indexOf(text)
slice
substring
str.trim(); 공백제거
text.repeat(n); // text 문자열 n번 반복
대문자가 소문자보다 크다
a가 더 크다