[JavaScript]변수

LMH·2022년 10월 21일
2
post-thumbnail

변수란 무엇인가?

변수는 컴퓨터 메모리에 할당된 데이터 보관함의 이름표라고 할 수 있습니다.

C, C++, Java와 같은 프로그래밍 언어의 경우 변수를 선언할 때 변수에 할당할 수 있는 데이터타입을 명시적으로 선언하고, 그에 따라 각각의 데이터타입에 맞는 메모리 용량을 할당하나 자바스크립트에서는 데이터타입을 따로 선언하지 않아도, 엔진이 변수에 할당된 값에 따라 동적으로 타입을 지정합니다.

자바스크립트 엔진은 숫자 타입을 저장하기 위해 8byte의 메모리 공간을 확보합니다.

다음과 같이 변수 num에 숫자 100을 입력하게 되면, 할당된 숫자 100을 메모리에 저장하기 위해 8byte의 메모리 공간을 확보하고 메모리 주소를 가리킵니다.

변수의 선언

변수의 선언은 var, const, let 키워드로 할 수 있으며, ES6에서 const와 let이 추가 되었습니다.

  • 키워드 종류 : var, let, const, function, function*, class

변수 선은은 선언과 초기화 단계를 거칩니다.

  • 선언단계 : 변수명을 등록하여 자바스크립트 엔진에 변수의 존재를 알립니다.
  • 초기화 단계: 값을 저장하기 위한 메모리 공간을 확보하고 암묵적으로 undefined를 할당해 초기화합니다.

var, let, const 차이

1. var의 문제점

  • 변수 중복 선언으로 예기치 못한 값을 반환
  • 함수 레벨 스코프로 함수 외부에서 선언한 변수는 모두 전역 변수
  • 호이스팅 발생(변수가 선언 전에 참조가 가능, undefined)
var foo =1
if (foo + 1 === 2) {
    var foo = 2
    console.log('IF문 안의 foo : ' + foo) // 2
}
console.log('IF문 밖의 foo : ' + foo) // 2
// if문 안에서 선언한 foo가 블록 스코프를 벗어나 if문 밖에서도 값을 유지한다.

ES6에서 나온 let과 const 키워드는 위의 세 가지 문제점을 해결

2. let

  • 변수 중복 선언은 불가하나 재할당은 가능
  • 블록레벨 스코프로 코드 블록(함수, if, for, while 등) 안에서 지역변수로 선언
let a = 10; 

let a = 20; // error(중복선언 불가)
  
a = 20 
console.log(a) // 20

3. const

  • const는 let과 달리 반드시 선언과 동시에 초기화를 진행해야한다.
  • let과 마찬가지로 중복 선언은 불가하나 재할당이 불가하다.(객체의 경우에는 재할당이 가능)
  • 블록레벨 스코프로 코드 블록(함수, if, for, while 등) 안에서 지역변수로 선언
const a // error(초기화 필요)

const a = 30;

자바스크립트 타입의 종류

1. 숫자(Number)

 10, 2000, 21234

2. 문자열(String)

 “코드스테이츠”, “변수”

3. 불린(Boolean)

 true, false

4. 객체(Object)

 *let Person {*

  name : James,

  age : 50,

  email : abc1234@gmail. 

}
  // 배열의 경우도 Object

5. Symbol

// 심볼은 ES6에서 새롭게 추가된 타입으로 변경 불가능한 원시 타입

6. undefined(변수에 값이 할당되지 않음)

// 선언 이후 값을 할당하지 않은 변수는 undefined 값을 가진다.
// 유일한 값 undefined

7. null

// null은 의도적으로 변수에 값이 없다는 것을 명시할때 사용.
// 유일한 값 null

typeof을 사용하여 변수의 타입을 출력

변수를 선언하고 typeof를 사용하여 변수의 타입을 반환할 수 있다.

하지만, 배열의 경우 typeof를 사용할 경우 object를 반환한다.

객체가 배열인지 확인하려면 ‘isArray()’ 함수를 사용하여 true 또는 false로 확인이 가능하다.


// 변수 선언

let number = 1

let major = “Front End”

let boolean = true

let fruits = [’딸기’, ‘포도’, ‘복숭아’]

*let Person = {*

  name : James,

  age : 50,

  email : abc1234@gmail. 

}

let sum = function(a, b) {
 return a + b;
}

  
// console.log 출력

console.log(typeof number) // number
  
console.log(typeof major) // string
  
console.log(typeof boolean) // true
  
console.log(typeof fruits) // object

console.log(Array.isArray(fruits) // true
  
console.log(typeof Person) // Object

console.log(typeof sum) // function
profile
새로운 것을 기록하고 복습하는 공간입니다.

0개의 댓글