1. 코드 작성 규칙
1) 세미콜론
- 여러줄의 코드를 작성한다면 세미콜론으로 그 다음 명령코드와 구분해야한다.
2) 주석
- 다른 사람이 작성한 코드를 볼 때 이해하기 어려운 경우가 많다. 이럴 때 사람만 알아볼 수 있도록 설명을 작성한 부분을 주석이라고 한다.
- 한줄 주석 : // 설명
- 여러 줄 주석 : /* 설명 */
3) 들여쓰기
- 2칸, 4칸, 탭으로 자유롭게 지정해도 되며, 코드의 가독성을 향상시켜준다.
2. 자료형
1) 문자열
- 프로그래밍에서 하나의 글자를 문자라고 하는데, 문자들이 하나 이상 나열되어 있다고 해서 문자열이라고 한다.
- 문자열은 작은따옴표, 큰따옴표 둘 다 사용가능하다. 다만, 시작과 끝이 서로 같아야한다.
- 현재 문자열의 타입이 정말 문자열이 맞는지 확인하려면 typeof 연산자를 사용하면 된다.
문자열 안에서 문자열 사용하기
- 다른 종류의 따옴표로 감싸준다.
"문자열 안에 작은따옴표가(') 있다네"
- 이스케이핑 : 문자열 내부에 \'이나 \"로 사용하면 된다.
- \n을 사용하면 문자열을 여러줄로 나타낼 수 있다.
- 템플릿 리터럴(`)으로도 문자열을 표현할 수 있다. \n을 사용하지 않아도 줄바꿈이 된다.
- 두 개의 문자열 사이에 +연산자를 두면 양쪽의 문자열이 하나로 합쳐진다.
2) 숫자
- 매우 큰 숫자나 소수점 아래 자릿수가 많을 때 e를 사용하는 지수표기법을 사용할 수 있다.
- parseInt로 문자열을 숫자로, parsefFloat로 문자열을 실수로 변환할 수 있다.
- parseInt(숫자, 진법)으로 10진법이 아닌 다른 진법으로 숫자를 변환할 수 있다.
- NaN : not a number이라는 말로, 타입은 숫자이다.
- Infinity: 숫자를 0으로 나누면 무한이라는 의미의 Infinity가 출력된다. 음수를 0으로 나누면 -Infinity로 출력된다.
- Infinity - Infinity, 0 / 0은 NaN으로 출력된다.
- 문자열 + 숫자 = 문자열, 문자열 - 숫자 = 숫자형으로 출력된다.
- 부동소수점 문제 : 0.3 - 0.1을 계산하면 정확하게 0.2라는 숫자가 출력되지 않는다. 해결하려면 실수를 정수로 바꿔서 계산한 후 다시 실수로 바꾸면 된다.
3) 불값
- true나 false를 나타내는 자료형이다.
- 비교 연산자의 결과값으로 불 값이 나온다.
- NaN == NaN의 결괏값은 false이다.
- true를 숫자로 변환하면 1이고, false를 숫자로 변환하면 0이다. 따라서 true > false의 결괏값은 true이다.
- 문자의 번호는 charCodeAt을 사용한다.
'a'.charCodeAt(); //97
- 문자열과 숫자를 비교하면 빼기 연산자와 마찬가지로 숫자고 형 변환된 후 비교한다. 불값도 마찬가지이다.
- == vs === : ==는 자료형이 다르면 같아지도록 형 변환한 후 비교하지만, ===는 자료형이 같은지까지 비교한다.
논리연산자
- &&는 그리고, ||는 또는 역할을 한다.
- !는 참을 거짓으로, 거짓을 참으로 만든다. !을 연달아 두번 사용하면 다른 자료형을 불값으로 형 변환할 수 있다.
- false, ''(빈문자열), 0, NaN, undefined, null, document.all을 제외한 값들은 모두 true이다.
4) 빈 값 사용하기
- undefined, null이 사용된다.
- undefined는 보통 반환할 결괏값이 없을 때 출력된다.
- undefined (or null) == false의 결괏값은 false이다. 0, ''와 비교해도 마찬가지이다.
- null은 빈값을 의미하지만 undefined와 같지는 않다.
- undefined == null의 결괏값은 true, undefined === null의 결괏값은 false이다.
- typeof null의 결괏값은 object이다. 따라서 어떤 값이 null인지 확인하기 위해서는 ===null을 사용해야한다.
3. 변수
1) let
- let으로 변수를 선언하면 대입연산자를 사용하여 변수의 값을 바꿀 수 있다.
- 값을 비우려면 undefined나 null을 대입하면 된다. 이때, null을 대입해 값을 의도적으로 지웠다는 의미를 부여할 수 있다.
2) const
- const로 선언하면 숫자, 문자열, 불값의 값을 변화시킬 수 없다. 객체의 경우는 객체 내부요소 변화는 가능하다.
- 선언 시 초기화를 하지 않으면 에러가 뜬다.
3) var
- 요새는 잘 사용하지 않는 추세이다.
- var로 변수를 선언하면 변수문이라고 한다.
- let과 마찬가지로 선언할 때 초기화하지 않으면 undefined가 대입된다.
- 기존에 선언했던 변수를 다시 선언해도 에러가 발생하지 않는다
- 예약어를 변수 이름으로 사용할 수 도 있다.
4. 조건문
1) if문
if (조건문) {
실행문;
else if(조건문) {
실행문;
else {
실행문;
}
- else는 조건이 여러개일 때 추가하여 여러 조건을 고려할 수 있다. else는 생략 가능하다.
- 조건문이 참이면 실행되고 거짓이면 다음 조건문의 참, 거짓 여부를 판단하며, 모두 거짓일 경우 else문이 실행된다.
- if문 안에 if문을 넣을 수 있지만, 코드의 가독성이 떨어지기 때문에 되도록 풀어쓰는 것을 권장한다.
2) switch문
switch(조건식) {
case 비교 조건식:
실행문;
case 비교조건식:
실행문;
default:
실행문;
}
- switch 옆의 조건식과 case의 비교 조건식이 서로 같은지(===) 판단하고 참일 경우 해당 case의 실행문 실행, 아닐경우 다음 case로 넘어간다. 모두 거짓일 경우 default문이 실행된다.
- 특정 case문만 실행하고 싶다면 그 case 내부에 break를 넣어주면 된다.
3) 조건부 연산자 or 삼항 연산자
조건식 ? 참일 때 실행되는 식 : 거짓일 때 실행되는 식
- 참일 때 / 거짓일 때 실행되는 식에 조건부 연산자를 중첩으로 사용할 수 있다.
5. 반복문
1) while문
while(조건식1) {
if (조건식2) {
break;
}
if (조건식3) {
continue;
}
실행문;
}
- while의 조건식 1이 true일 경우 실행문이 실행된다. 조건식이 계속 true라면 실행문은 무한 반복된다.
- 무한 반복을 막으려면 조건식 1에 일정횟수 이상이 되면 거짓이 되게 하거나 if문에 break를 넣어 조건식 2이 true가 되면 멈추게 할 수 있다.
- 조건식 3이 true일 경우 while의 실행문은 실행되지 않고 다시 조건식 1의 참 거짓여부를 판단한다.
2) for문
for (시작; 조건식; 종료식;) {
실행문;
}
for (let i = 0; i < 100; i++) {
console.log('hello');
}
- for문이 실행되면 시작부분이 먼저 실행되고 조건식, 실행문, 종료식에 도달한 후 조건식, 실행문, 종료식이 반복된다.
6. 객체
- 객체의 종류는 크게 배열, 함수, 배열이나 함수가 아닌 객체로 이루어져 있다.
1) 배열
const 변수명 = ['요소', '요소', 요소, 요소];
변수명[요소인덱스];
- 배열을 만들려면 대괄호로 값을 감싸면 된다. 값은 쉽표로 구분한다.
- 요소는 문자열, 다른 배열 등 다양한 자료형을 넣을 수 있다. 요소들 간에 자료형이 달라도 된다.
- 첫번째 요소의 인덱스는 0이고 마지막 요소의 인덱스는 (변수명.length - 1)이다.
- .length는 배열 요소의 개수를 구할 수 있다.
(1) 배열에 요소 추가
const target = [1, 2, 3, 4, 5];
target[5] = 6;
- 배열의 맨 앞에 값을 추가하려면 unshift를 사용하면 된다.
- push를 사용하면 맨 뒤에 값이 추가된다.
- const로 선언하면 배열을 통째로 바꿀 수는 없지만, 요소들은 변경 가능하다.
(2) 배열 요소 수정
- 추가할 때처럼 원하는 인덱스에 값을 대입하면 된다.
(3) 배열에서 요소 제거
- pop을 사용하면 마지막 요소를 제거할 수 있다.
- 배열의 첫번째 요소를 제거하려면 unshift를 사용하면 된다.
- 배열의 중간 요소를 제거하려면 splice를 사용하면 된다.
const target = ['a', 'b', 'c', 'd', 'e'];
target.splice(1, 2);
target.splice(0, 0, 'j', 'k');
(4) 배열에서 요소 찾기
- 단순하게 배열에 특정요소가 존재하는지만 확인하려면 includes를 사용하면 된다.
- 검색하고 싶은 값의 인덱스를 알고싶다면 indexOf 나 lastIndexOf를 사용하면 된다. lastIndexOf는 뒤에서부터 인덱스 카운팅을 한다.
2) 함수
- 프로그래밍에서 함수란 특정한 작업을 수행하는 코드를 의미한다.
- 함수 선언 방법
function a() {}
const b = function() {};
const c = () => {};
- 재사용성이 높아진다.
- 함수를 호출하면 항상 결괏값이 반환된다. 기본값은 undefined이며,
return 반환하려는 값;
형태로 결괏값을 지정할 수 있다.
- 또한 return은 함수의 실행을 중간에 멈추는 역할을 한다.
(1) 매개변수와 인자
function a(x, y) {
console.log(x, y);
console.log(parameter);
}
a(1, 2)
- x, y를 매개변수(parameter)라고 하고, 1, 2를 인수(argument)라고 한다.
- 매개변수와 인수의 개수는 서로 달라도 된다.
- 화살표 함수에서는 argument를 사용할 수 없다.
(2) 객체 리터럴
- 이름, 나이, 성별 등의 정보를 사람이라는 객체에 묶어 저장하면 가독성이 높아진다.
- 형식
const 객체 = {
속성1이름: 속성1값,
속성2이름: function(value) {
실행문;
},
}
- 프로퍼티 접근방법 : 변수.속성명 또는 변수['속성명']
- 변수.속성 = 값;을 하면 속성값이 바뀐다.
- delete 변수.속성;을 하면 해당 속성 값이 undefined가 된다.
- 메소드 접근방법 : 변수.메소드명(인자);
(3) 객체간 비교
- {} === {}의 결괏값은 false이다.
- 객체는 모양이 같아도 생성할때마다 새로운 객체가 생성되기 때문이다. 따라서 기존 객체를 변수에 저장해놓고 변수간에 비교를 해야한다.
(4) 참조와 복사
- 참조 : 변수 b에 a를 대입한 후 a 변수의 속성값을 변경하면 b 변수도 같이 변경된다. 객체 간에 참조관계에 있기 때문이다.
const a = {name: 'JunYoung'}
const b = a;
a.name = 'me';
- 복사 : 객체가 아닌 값을 변수에 저장하면 이러한 상황이 발생하지 않는다. 이를 복사라고한다.