| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |
- LV2
- docker
- 코딩테스트
- Spring
- 서버 꺼짐
- spring boot
- mysql
- 네팔
- crud
- Dockerfile
- 알고리즘
- Java
- springboot
- 부트스트랩
- 우테코
- fastapi
- Lv.2
- 프로젝트
- cors
- 회고
- OOM
- 쿠키로그인
- 게시판
- 프로그래머스
- llm
- 커밋 메시지
- openAI
- 로그인
- 세션로그인
- 해외봉사
- Today
- Total
s00jin 님의 블로그
[오픈미션] Javascript 공부 본문
리액트 자신있게 들어가려고 했다..
하지만 난 HTML, CSS만 가능한 사람…
것도 기본 문법이랑 늬양스 정도만 아는…
그래서 급 드래프트로 자바스크립트 공부 먼저 했다.
근데 리액트 강의를 켰더니 자바스크립트를 알아야 한다고 한다..
(이런 사실도 몰랐던 엄청난 코린이….)
변수와 스코프
const
- 상수
- 선언 + 초기와 + 할당이 한번에 이루어짐
- 재할당 불가
let
- 변하는 값
- 한 번 선언된 변수를 다시 선언하면 에러
- 블록 스코프
var
- 한 번 선언된 변수를 다시 선언 할 수 있음 (재선언 가능)
- 선언하기 전에 사용 가능 (호이스팅)
- 하지만 할당은 할당된 위치 이후부터 가능
- 그전에 사용하면 undefined
- 함수 스코프
호이스팅
스코프 내부 어디서든 변수 선언은 최상위에 선언된 것 처럼 행동 (할당 X)

변수의 생성과정
- 선언 단계
- 초기화 단계
- 할당 단계
var
- 선언 및 초기화 단계
- 할당 단계
let
- 선언 단계
- 초기화 단계
- 할당 단계
const
- 선언 + 초기화 + 할당
var : 함수 스코프
let, const : 블록 스코프
결론
- 이왕이면 var 말고 let, const 써서 예측 가능한 코드를 짜는게 좋다!!
브라우저 기본 함수
alert() → 단순 알림 느낌
prompt() → 사용자에게 값을 입력 받을 때 (문자열 반환)
- 인수 2개 가능
- 두번째는 기본값
confirm() - 확인/취소가 있는데 각각 true/false 반환
단점
- 스크립트를 강제로 일시 정지함
- 스타일링 불가능
형변환
String() → 문자형으로 변환 (대문자로 시작해야 함)
Number() → 숫자형으로 변환
Boolean() → 불린형으로 변환
프롬프트 입력 시 입력 값은 문자열이 됨
false
- 숫자 0
- 빈 문자열
- null
- undefined
- NaN
주의사항
Number(null) → 0
Number(undefined) →NaN
Boolean(0) → false
Boolean(’0’) → true
Boolean(’’) → false
Boolean(’ ‘) → true
기본 연산자
- 거듭제곱: **
- 일치 비교:
- === 타입 + 값 모두 비교
- == 자동 형변환 → 1 == "1" → true
조건문
- if / else if / else
- switch
- (case마다 break 필요)
반복문
for
for (let i = 0; i < 10; i++) {}
while
while (i < 10) { i++; }
do … while
한 번은 무조건 실행
break / continue
반복 제어
함수
function sayHello(name) {
console.log(`Hello, ${name}`);
}
함수 선언문
sayHello(); // 호이스팅 가능
function sayHello() {
console.log('Hello');
}
- 어디서든 호출 가능
- 인터프리터 방식이지만 코드를 실행하기 전 선언된 함수를 모아 먼저 실행해둠
- = 호이스팅 방식
함수 표현식
let sayHello = funtion() {
console.log('Hello');
}
sayHello();
- 코드에 도달하면 생성
화살표 함수
const add = (a, b) => a + b;
화살표 함수의 특징
- 자신만의 this 없음 → 외부 this를 가져옴
객체 Object
method: 객체 프로퍼티로 할당 된 함수
const superman = {
name:'clark',
age:33,
fly:function(){ // funcion 키워드 생략 가능 :이것도 같이 생략 가능
console.log('날아갑니다')
}
}
화살표 함수는 일반 함수와는 달리 자신만의 this를 가지지 않음
화살표 함수 내부에서 this를 사용하면, 그 this는 외부에서 값을 가져 옴
배열
let student = [’철수’, ‘영희’, … , ‘영수’];
- 배열은 문자뿐만 아니라, 숫자, 객체, 함수 등도 포함할 수 있음
- length : 배열의 길이
- push : 배열 끝에 추가
- pop : 배열 끝 요소 제거
- unshift : 배열 앞에 추가
- shift : 배열 앞에 제거
반복문
- for
- for … of
let days = ['월', '화', '수'];
for(let day of days) {
console.log(day);
}
for … in 이 아님 이건 배열에서는 비추
생성자 함수
- 보통 첫글자는 대문자로
- new 연산자를 사용하여 호출
function User(name, age) {
this.name = name;
this.age = age;
this.sayName = function() {
console.log(this.name);
}
}
let user1 = new User('Mike', 30);
let user2 = new User('Jane', 22);
user1.sayName(); // 'Mike'
computed property
const key = "age";
const user = {
name: "Mike",
[key]: 30
};
Object 메소드
- assign() : 객체 복사
const newUser = Object.assign({}, user);
{} + { name : 'Mike', age : 30 } =
-----------
Object.assign({ gender:'male' }, user);
위처럼 초기값 주면
gender : 'male',
name : 'Mike',
age : 30,
이렇게 됨
초기값에 들어간 키가 같다면 뒤에 user에꺼를 덮어씀
------------------
const user = {
name : 'Mike'
}
const info1 = {
age : 30,
}
const info2 = {
gender : 'male',
}
Object.assign(user, info1, info2)
이렇게 하면 user에 info1과 info2 합치는 것
{} 초기값 , user 가 초기값에 들어감
그래서 새로운 객체에 복사되는 것
- Object.keys() : 키 배열 반환
const user = {
name : 'Mike',
age : 30,
gender : 'mail',
}
Object.keys(user);
// ["name", "age", "gender"]
- Object.values() : 값 배열 반환
const user = {
name : 'Mike',
age : 30,
gender : 'male',
}
Object.values(user);
// ["Mike", 30, "male"]
- Object.entries() : 키/값 배열 반환
const user = {
name : 'Mike',
age : 30,
gender : 'male',
}
Object.entries(user);
//
[
["name", "Mike"],
["age", 30],
["gender", "male"]
]
- Object.fromEntries() : 키/값 배열을 객체로
const arr =
[
["name" "Mike"],
["age", 30],
["gender", "male"]
];
Object.fromEntries(arr);
//
{
name: 'Mike',
age : 30,
gender : 'mail',
}
Symbol
- 유일성 보장
const a = Symbol(); // new 붙이지 않음
const b = Symbol();
const c = Symbol(’id’); // 이렇게 설명 추가 가능
console.log(a) // Symbol() 출력
a === b // false
const id = Symbol('id');
const user = {
name : 'Mike',
age : 30,
[id] : 'myid'
}
user
// {name: "Mike", age: 30, Symbol(id): "myid"}
user[id] // "myid"
// 하지만 Object 메소드 사용시 키가 심볼형인 애들은 건너뜀
Object.keys(user); // ["name", "age"]
Object.values(user); // ["Mike", 30]
Object.entries(user); // [Array(2), Array(2)]
// 숨겨진 심볼 키를 보고 싶다면
Object.getOwnPropertySymbols(user); // [Symbol(id)]
Reflect.ownKeys(user); // ["name", "age", Symbol(id)]
Symbol.for() : 전역 심볼
- 하나의 심볼만 보장 받을 수 있음
- 없으면 만들고, 있으면 가져오기 때문
- Symbol 함수는 매번 다른 Symbol 값을 생성하지만,
- Symbol.for 메소드는 하나를 생성한 뒤 키를 통해 같은 Symbol을 공유
const id1 = Symbol.for('id');
const id2 = Symbol.for('id');
id1 === id2 // true
// 이름을 얻고 싶다면
Symbol.keyFor(id1) // "id"
// 만약 전역 심볼이 아닌데 이름을 알고 싶다면
const id = Symbol('id 입니다');
id.description; // "id 입니다"
// 다른 개발자가 만들어 놓은 객체
const user = {
name: "Mike",
age: 30,
};
// 내가 작업
// user.showName = function() {}; // 이렇게 하면 아래 사용자가 보는 메세지가 이상해짐
const showName = Symbol("show name");
user[showName] = function () {
console.log(this.name);
};
user[showName](); // Mike
// 사용자가 접속하면 보는 메세지
for (let key in user) {
const.log(`His ${key} is ${user[key]}.`);
}
// His name is Mike.
// His age is 30.
'우아한테크코스' 카테고리의 다른 글
| [오픈미션] 리액트 공부 3 (0) | 2025.11.24 |
|---|---|
| [오픈미션] 리액트 공부 2 (0) | 2025.11.24 |
| [오픈미션] 리액트 공부 1 (0) | 2025.11.24 |
| [회고] 1주차 프리코스 회고 (0) | 2025.10.22 |
| Git 커밋 메시지 정리본 (0) | 2025.10.18 |