변수(Variable)란, 메모리 주소(Memory Address)에 접근하기 위해 사람이 이해할 수 있는 언어로 지정한 식별자(Identifier)
쉽게 말해, 메모리 상의 주소지를 의미해요!
인사이드 아웃처럼 컴퓨터 내부에도 컴퓨터를 이루는 구성들 간의 작은 세상이 존재해요!
인간의 주소지처럼, 컴퓨터 내부의 메모리 상의 주소지도 존재해요.
그래야 어느 집에 누가 사는지 알 수 있으니까요.
변수에 들어가서 사는 친구의 이름이 값(value)이고 이를 저장해두어요. 우리 주민센터에서 하는 일이랑 같아요.거주지에 거주자를 저장해두잖아요. 세대주는 누구고, 가구원은 누가 있는지 같은 것들이요.그리고 저장된 값을 참조하기 위해 사용해요. 필요에 의해 요청하면 거기서 사용할 수 있게 한다는 거죠.
변수도 사람 사는 세상과 같은 개념이 적용됩니다. 우리 파티룸 같은 거 당일치기로 빌릴 때 주민센터에 가서 주소지를 바꾸지 않죠? 그것처럼 변수도 한 번 쓰고 마는 값이 아니라 유지(chashing)할 필요가 있는 값만 담아서 사용해요.
+) 좋은 점은 변수 이름을 값의 의미를 담아 정할 수 있다는 거예요!
= 코드의 가독성을 위함이지만요.
var x;
x = 6;
변수를 선언할 때는var키워드를 사용하고할당 연산자 =는 변수에 값을 할당하기 위해 사용
값(Value)
: 프로그램에 의해 조작될 수 있는 대상
값을 생성하는 방법 - 리터럴 표기법(literal notation)
데이터 타입(Data Type)
프로그래밍 언어에서 사용할 수 있는 값의 종류
변수(Variable)
값이 저장된 메모리 공간의 주소를 가리키는 식별자(identifier)
리터럴(literal)
소스코드 안에서 직접 만들어 낸 상수 값 자체를 말하며 값을 구성하는 최소 단위
* 원시 타입 리터럴은 다양한 연산자의 피연산자가 되어 하나의 값이 될 수 있음
원시 타입(Primitive Data Type)
number, string, boolean, null, undefined, symbol
객체 타입(Object Data Type)
object
* 자바스크립트는 C나 Java와는 다르게 변수를 선언할 때 데이터 타입을 미리 지정 X
= 변수에 할당된 값의 타입에 의해 동적으로 변수 타입 결정(동적 타이핑)
연산자
하나 이상의 표현식으로 산술, 할당, 비교, 논리, 타입 연산 등을 수행해 하나의 값 생성
연산의 대상 : 피연산자(Operand)
* 피연산자의 타입 반드시 일치할 필요 X -> 암묵적 타입 강제 변환을 통해 연산 수행
키워드
수행할 동작을 규정한 것
ex) var 키워드는 새로운 변수를 생성할 것을 지시함
주석
작성된 코드의 의미 설명 - 코드 이해+가독성 향상
한줄 주석은//
여러 줄 주석은/*과*/ 사이에 작성
문
각각의 명령을 문(statement)
리터럴, 연산자(Operator), 표현식(Expression), 키워드(Keyword) 등으로 구성 + 세미콜론( ; )으로 끝나야 함
코드 블록(code block, {…})으로 그룹화 - 함께 실행되어져야 하는 문을 묶기 위함
위에서 아래의 순서로 실행
조건문(if, switch)이나 반복문(while, for)의 사용으로 제어(흐름제어(Control Flow)) 또는 함수 호출로 변경
논리 부정(!) 연산자: 언제나 불리언 값 반환 논리합(||) 연산자와 논리곱(&&) 연산자: 일반적으로 불리언 값 반환, 반드시 불리언 값 반환해야 하는 것 X
#외에도 순서를 나타내는 쉼표 연산자(,), 그룹 내의 표현식에 우선순위가 있음을 알리는 그룹 연산자(( )), 피연산자의 데이터 타입을 문자열로 반환하는 typeof연산자 등이 있다.
제어문
주어진 조건에 따라 코드 블록을 실행(조건문)하거나 반복 실행(반복문)할 때 사용
위 -> 아래로 순차 실행되는 게 일반적이지만 제어문은 코드 실행 순서를 인위적으로 제어 가능
블록문 : 0개 이상의 문들을 { }로 묶은 것(: 코드 블록 / 블록)
조건문 : 주어진 조건식(boolean으로 평가될 수 있는 표현식)의 평가 결과에 따라 블록문 실행 결정 -> if...else문, switch문
1) if...else문
if (조건식1) {
// 조건식1이 참이면 이 코드 블록이 실행된다.
} else if (조건식2) {
// 조건식2이 참이면 이 코드 블록이 실행된다.
} else {
// 조건식1과 조건식2가 모두 거짓이면 이 코드 블록이 실행된다.
}
* 조건식의 평가 결과가 불리언 값이 아니면 불리언 값으로강제 변환되어 논리적 참, 거짓 구별 * else if문은 여러 번 사용 가능 * 삼항 조건 연산자로 바꿔쓸 수 있음
2) switch문
switch (표현식) {
case 표현식1:
switch 문의 표현식과 표현식1이 일치하면 실행될 문;
break;
case 표현식2:
switch 문의 표현식과 표현식2가 일치하면 실행될 문;
break;
default:
switch 문의 표현식과 일치하는 표현식을 갖는 case 문이 없을 때 실행될 문;
}
: 표현식을 평가해 그 값과 일치하는 표현식을 갖는 case 문으로 실행 순서 이동 * 일치하는 표현식을 갖는 case 문이 없다면 실행 순서 default 문으로 이동(default 옵션 사용/사용 X는 선택) * 불리언 값 < 문자열, 숫자 값 * break 문: 코드 블록에서 탈출하는 역할
반복문 : 주어진 조건식의 평가 결과가 참은 경우 블럭 실행 -> 다시 검사해 여전히 참인 경우 블럭 재실행 (거짓일 때까지 반복) -> for문, while문, do...while문
1) for문
for (초기화식; 조건식; 증감식) {
조건식이 참인 경우 반복 실행될 문;
}
* for문 내에 for문 중첩 가능
2) while문
while (조건식) {
조건식의 평가 결과가 참일 경우 반환할 값;
}
* 평가 결과가 참이면 코드 블록을 계속해서 반복 실행, 조건문의 평가 결과가 거짓이 되면 실행 종료
3) do...while문
do {
조건식이 참일 경우 반환할 값;
} while (조건식);
4) break문 : 레이블문(식별자가 붙은 문), 반복문(for, for…in, for…of, while, do…while) 또는 switch 문의 코드 블록 탈출 * 이외에 사용하면 SyntaxError(문법 에러)가 발생
5) continue문 : 반복문의 코드 블록 실행을 현 지점에서 중단하고 반복문의 증감식으로 이동
타입 변환
명시적 타입 변환(Explicit coercion) / 타입 캐스팅
개발자에 의해 의도적으로 값의 타입을 변환
암묵적 타입 변환(Implicit coercion) / 타입 강제 변환
자바스크립트 엔진에 의해 암묵적으로 타입이 자동 변환 에러없이 평가하기 위해 기존 값을 바탕으로 새로운 타입의 값을 만들어 단 한번 사용하고 버림
# 암묵적 타입 변환
1 + '2' // "12"
5 * '10' // 50
피연산자 중 하나 이상이 문자열 => 문자열 연결 연산자로 동작
+ 는 덧셈도 되지만 문자열 연결 연산자이기도 하기 때문에!
+ 단항 연산자는 피연산자가 숫자 타입의 값이 아니면 숫자 타입의 값으로 암묵적 타입 변환 수행
이 말은 산술 연산자에만 해당되는 거면 숫자 타입으로 나온다는 말도 되겠지요.
// 숫자 타입
0 + '' // "0"
-0 + '' // "0"
1 + '' // "1"
-1 + '' // "-1"
NaN + '' // "NaN"
Infinity + '' // "Infinity"
-Infinity + '' // "-Infinity"
// 불리언 타입
true + '' // "true"
false + '' // "false"
// null 타입
null + '' // "null"
// undefined 타입
undefined + '' // "undefined"
// 심볼 타입
(Symbol()) + '' // TypeError: Cannot convert a Symbol value to a string
// 객체 타입
({}) + '' // "[object Object]"
Math + '' // "[object Math]"
[] + '' // ""
[10, 20] + '' // "10,20"
(function(){}) + '' // "function(){}"
Array + '' // "function Array() { [native code] }"
* 빈 문자열(‘’), 빈 배열([]), null, false는 0, true는 1로 변환
* 객체와 빈 배열이 아닌 배열, undefined는 변환되지 않아 NaN
boolean 타입으로 변환
불리언 타입이 아닌 값을Truthy 값(참으로 인식할 값) / Falsy 값(거짓으로 인식할 값)으로 구분
=> Truthy 값 = true로, Falsy 값 = false
false undefined null 0, -0 NaN " "(빈 문자열)
위는 false로 평가되는 Falsy값
이외의 값은 true로 평가되는 Truthy값
# 명시적 타입 변환
문자열 타입 변환
String 생성자 함수를 new 연산자 없이 호출하는 방법
Object.prototype.toString 메소드를 사용하는 방법
문자열 연결 연산자를 이용하는 방법
숫자 타입 변환
Number 생성자 함수를 new 연산자 없이 호출하는 방법
parseInt, parseFloat 함수를 사용하는 방법(문자열만 변환 가능)
단항 연결 연산자를 이용하는 방법
산술 연산자를 이용하는 방법
불리언 타입 변환
Boolean 생성자 함수를 new 연산자 없이 호출하는 방법
! 부정 논리 연산자를 두번 사용하는 방법
단축 평가
논리곱 연산자(&&) : 모두 true일 때 true 논리합 연산자(||) : 단축 평가(Short-Circuit evaluation)
단축 평가 표현식
평가 결과
true || anything
true
false || anything
anything
true && anything
anything
false && anything
false
* 객체가 null인지 확인하고 프로퍼티 참조 * 함수의 인수 초기화 => 위의 경우에 사용해서 발생하는 에러를 방지할 수 있음