자바스크립트 복습 -1

Imnottired·2023년 2월 24일
0
post-thumbnail

https://www.youtube.com/watch?v=4_WLS9Lj6n4&t=62s
코딩앙마 자바스크립트 중급 강좌

var는 한번 선언된 변수를 다시 선언할 수 있다.

같은 상황에서 let, const는 불가하다.

var는 선언하기 전에 사용할 수 있다.(호이스팅)

undefined 뜨는 이유:

  • var 선언은 호이스팅 되지만 할당은 호이스팅 되지 않는다.

  • 호이스팅 스코프 내부 어디서든 변수 선언은 최상위에 선언된 것처럼 행동한다.

let과 const는 호이스팅 되지만 Temporal Dead Zone에 영향을 받습니다.
그래서 할당이 되어야지만 사용할 수 있다.

변수의 생성과정 3가지

  • 1 선언 단계
  • 2 초기화 단계
  • 3 할당 단계

var

  1. 선언 및 초기화 호이스팅 시 동시에 이루어진다.

초기화는 undefined를 할당해주는 단계를 의미한다.

  1. 할당단계

let

  1. 선언단계 호이스팅

  2. 초기화 단계는 실제 코드에 도달했을 때 이루어짐
    초기화 진행전에 console.log를 찍으면 ReferenceError: x is not defined라는 오류가 뜬다

  3. 할당단계

재할당은 가능하지만, 재선언은 불가하다

const

  1. 선언 + 초기화 + 할당
    호이스팅 이후에 3가지가 동시에 일어나서
    console.log를 찍으면 eferenceError: Cannot access 'x' before initialization
    라는 오류가 뜬다
    실제 코드와 만나서 초기화가 되어야지 사용할 수 있다.

재할당 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가 더 크다

profile
새로운 것을 배우는 것보다 정리하는 것이 중요하다.

0개의 댓글