- 값, 식, 문
- Primitive Type & Reference type 차이점 및 이해 (o)
- Truthy & Falsy 차이점 및 이해 (o)
값
값
은 프로그램에 의해 조작될 수 있는 대상을 말합니다. 값은 다양한 방법으로 생성할 수있으며 프로그래밍 언어에서 값을 생성하는 가장 쉬운 방법은 리터럴을 사용하는 것입니다.
1 | 1; // 정수 리터럴 |
변수
값에 이름을 붙여서 다시 쓸 수 있게 만드는 기능
const | let | var | |
---|---|---|---|
스코프 | 블록 스코프 | 블록 스코프 | 함수 스코프 |
재대입 | X | O | O |
재선언 | X | X | O |
호이스팅 | X | X | O |
사용 권장 | 1 순위 | 2 순위 | 3 순위 |
🏷 호이스팅\
호이스팅이란 var로 선언된 변수나 function의 선언부를 현재 scope의 최상단으로 끌어올려지는 현상입니다.
식별자
변수의 이름은 모두 식별자입니다.
타입
값의 종류를 가지고 자료형이라고 부릅니다.
1 | typeof 1; // 'number' |
식
문
조건문
경우의 수
if…else
if...else
구문을 사용하면 조건에 따라 특정 영역의 코드를 실행시키거나 실행시키지 않을 수 있습니다.
1 | function translateColor(english) { |
switch
변수에 대해 많은 경우 사용
1 | function translateColor(english) { |
반복문
여러 번 반복할 경우
while
특정 조건을 만족하는 한 코드를 반복해서 실행
1 | let i = 0; |
do…while
while
구문과 사용법은 크게 다르지 않으나, 내부 코드를 무조건 한번은 실행시킨다는 차이점이 있습니다.
1 | do { |
for
초기값을 정할 수 있고 갱신을 위한 코드가 짧은 경우 for
구문 while
구문을 사용해야 코드가 깔끔해집니다.
1 | // for문 |
1 | // forEach |
1 | // for...of |
Primitive Type & Reference type (원시타입 & 참조타입)
원시타입 | 참조타입 |
---|---|
Number | Object |
String | |
Boolean | |
Undefined | |
Null | |
Symbol |
함수도 객체의 일종입니다.
원시타입의 특징
원시타입은 값 자체의 내용을 변경할 수 있는 방법이 없습니다. 이런 성징은 불변성
이라고 합니다.
기존 문자열의 내용을 바꾸는 것이 아니라 새 문자열을 반환합니다.
1 | let str1 = "Hello world"; |
원시타입은 데이터를 복사하여 전달하기 때문에 원본 데이터가 변경되어 쌓이고 복사된 데이터에 영향을 받지 않습니다.
참조타입의 특징
참조(Reference)란, 객체가 컴퓨터 메모리 상에서 어디에 저장되었는지를 가리키는 값입니다. JavaScript에서는 우리가 참조를 직접 읽거나 조작할 수 없습니다. 하지만, 언어를 제대로 이해하기 위해서 참조가 무엇인지 알아야 할 필요는 있습니다.
참조를 통해 메모리에 저장되어 있는 객체에 접근해서 해당 객체의 속성을 읽습니다.
이런 동작을 역참조(dereference)라고 합니다.
1 | const obj = { prop: 1 }; |
1 | let obj1 = { name: "kim" }; |
변수 obj2은 변수 obj1이 가리키고 있는 { name: “kim” }를 가르키고 있어 { name: “kim” }으로 출력이 되었습니다.
참조타입과 원시타입의 비교연산자
1 | // 원시타입 비교 연산자 |
원시타입은 값을 비교하기 때문에 true가 나옵니다.
1 | const obj1 = { name: "kim" }; |
객체의 내용을 비교하는 것이 아니라 객체의 참조를 비교합니다. 우리가 생성자나 리터럴을 이용해 객체를 생성하면, 객체는 매 번 새로 생성되어 각각 메모리의 다른 위치에 저장됩니다.
그래서 내용이 똑같아 보이는 두 객체일지라도 그에 대한 참조는 서로 다른것입니다.
하지만 두참조가 정말로 같은 객체를 가리키고 있다면 등호연산자는 true
를 반환합니다.
1 | const obj1 = {}; |
객체의 내용을 통해 비교하고 싶다면, 깊은 비교 기능을 지원하는 라이브러리를 이용해야합니다.
참고하기 좋은 영상
[서형이에게물어봐야함]
Truthy & Falsy
JS에서는 boolean 타입이 와야 하는 자리에 다른 타입의 값이 와도 에러가 나지 않고 실행됩니다.
1 | // 1은 Truthy |
true
-> truthy
, false
-> falsy
라고 부릅니다.
truthy | falsy |
---|---|
falsy 말고 모든것 | false |
null | |
undefined | |
0 | |
NaN | |
‘’ |
짧은 코드 작성은 가능하지만 코드의 의미가 불분명해지거나 논리적으로 놓치는 부분이 생길 수 있기 때문에 주의하여 사용합니다.