[Javascript] Javascript 기초 (ES5+) by 드림코딩 2. 데이터타입

username_oy·2023년 11월 21일

JavaScript 기초

목록 보기
2/6

1. let vs var

(1) Variable (변수)

  • var or let or const가 있다
  • let은 ES6부터 추가되었다
  • ES6 이후로는 var 대신 let이 사용되고 있다.

(2) let(mutable data type)

let name // name이란 이름으로 선언
let name = 'kim'; // 'kim'이란 값을 할당
console.log(name); // kim
name = 'lee'; // let은 값을 재할당 가능

어플리케이션을 실행하게 되면 어플리케이션마다 쓸 수 있는 메모리가 할당된다.
메모리는 비어져 있는 상자라고 생각하면 되는데, 어플리케이션마다 쓸 수 있는 상자는 한정적이다.

위 코드를 예를 들어 설명하자면, name이라는 이름으로 선언을 하면
하나의 박스를 가리키는 포인터가 생기게 되는 것이다.
name이라는 변수가 가리키는 메모리 어딘가에 kim이라는 값을 저장할 수 있다.

2. Block scope

{
let name = 'kim';
console.log(name); // 'kim'
name = 'lee'
console.log(name); // 'lee'
}
console.log(name); // 블럭 밖에선 블럭 안에서 정의된 변수에 접근 불가

3. Global scope

let globalscope = 'global name'
{
let name = 'kim';
console.log(name); // 'kim'
name = 'lee'
console.log(name); // 'lee'
console.log(globalname); // 'global name'
}
console.log(name); // 블럭 밖에선 블럭 안에서 정의된 변수에 접근 불가
console.log(globalname); // 'global name'

global scope는 어디서나 접근 가능하다.

4.📌hoisting

console.log(age); // undefined 정의는 되어 있으나 값이 없다. 값을 할당하기 전에도 출력할 수 있다. 
age = 4;
var age;

호이스팅은 어디에 선언했는가 상관없이 항상 선언을 제일 위로 끌어올려주는

4-1) Hoisting has no block scope(블록 스코프가 존재하지 않는다)

{
age = 4;
var age
}
console.log(age); // 4

age를 블록 안에서 선언했음에도 불구하고 블록 밖에서 출력했을 시 출력이 된다.

5.Constants(immutable data type)

📌선언되고 값을 한 번 할당하면 절대 바뀌지 않는

메모리 어딘가에 할당된 박스를 가리키는 포인터를 이용해 값을 바꿔나갈 수 있는 let과 달리
Constants는 이 포인터가 잠겨있어 선언과 값을 할당하는데 있어 변경을 할 수가 없다
보안상의 이유 그리고 어플리케이션의 효율성으로 인해

6.Variable types

1) primitive type(더 이상 작은 단위로 나눠질 수 없는 아이템)

✔ number, string, boolean, null, undefined, symbal

값 자체가 메모리에 저장된다.

2) object type(위 primitive type의 아이템들을 묶어서 관리할 수 있게 하는)

function

크기가 크기 때문에 메모리에 그대로 저장될 수 없다.
object를 할당하면 그 곳에는 reference가 존재하는데, 이 reference를 통해 object가 담겨있는 메모리를 가리키게 된다.

📌number 중 특별한 값

infinity
negativeInfinity
NaN
나누고자 하는 값이 0인지 숫자인지 확인하지 않고 나눔을 진행하게 된다면
에러가 발생한다.

7.String

  • 글자의 갯수와 상관없이 모두 String 타입으로 할당된다
  • String과 일반 변수를 합치는 것도 가능하다.
  • template literals : 백틱기호와 달러와 중괄호를 이용하면 변수의 값을 붙혀서 넣을 수 있다.
    quote를 사용하는 것과는 다르게 spacing과 문자열들이 그대로 나오기 때문에 간편하게 출력할 수 있다는 장점이 있다.

8.Boolean


✔ 0, null, undefined, NaN, '' 값은 모두 false에 해당한다.

8-1) null vs undefined

null은 값이 없는 상태
undefined 선언은 되었지만 값이 지정되어있지 않은 상태

8-2) symbol


✔ 고유한 식별자를 만들 때 사용된다.
(동일한 String을 사용했어도 symbol은 다르다)
만약 String이 똑같고 동일한 symbol을 만들고 싶다면 Symbol.for라는 키워드를 사용하면 된다.

const gSymbol1 = Symbol.for('id');
const gSymbol2 = Symbol.for('id');
console.log(gSymbol1 === gSymbol2); // true

9.동적 타이핑(Dynamic typing)

변수를 선언할 때 어떤 타입인지 선언하지 않고 프로그램이 동작할 때 할당된 값에 따라 타입이 변경될 수 있다.

let은 재할당이 가능하기 때문에 text라는 변수를 숫자 1로 재할당이 가능하고

중요한 것은 String 7과 Number 5를 더하게 되면 문자로 인식하여 String 75를 반환하고
String 8 과 String 2를 나누면 숫자 나누기 숫자로 인식하여 Number 4를 반환하게 된다.

profile
프런트엔드 개발자로의 여정

0개의 댓글