타입
JavaScript는 동적 타입이 있는 동적 언어임, 변수는 특정 타입과 연결되지 않으며 모든 타입의 값으로 할당 및 재할당이 가능함!
타입이 다른 피연산자와 결합할 때 암시적 타입 변환이 일어남(오류 주의)
ex)
let foo = 2; //숫자
const bar = foo + "1"; // bar = "21"
foo = "hello" //문자열
타입은 typeof 연산자로 확인할 수 있음
console.log(typeof foo); // string
단, null은 object를 반환하므로 null을 체크하려면
console.log(foo===null) //false
타입 종류
1) Primitive type
Null
객체가 없음을 의미, 아무런 객체도 가리키지 않음을 표현
Undefined
값이 없음을 의미, 존재하지 않는 객체 속성에 접근하거나 초기화하지 않은 변수에 접근하면 undefined를 반환함
*null vs undefined
typeof null // "object"
typeof undefined // "undefined"
null === undefined //false
null == undefined // true
let x;
typeof x // "undefined"
x = null
typeof x // "object"
Boolean
true / false
Number
정수 또는 실수형 숫자
double 타입처럼 IEEE 754 64비트 바이너리 배정 밀도 값(범위 주의)
최대값보다 더 큰 값은 Number형 상수인 Infinity로 대체됨
*따로 정수형, 실수형이 존재하지 않음, 부동 소수점 값
ex)
37 === 37.0 //true
BigInt
Number보다 큰 정수를 표현할 수 있음
정수 리터럴 뒤에 n을 붙이거나 BigInt()를 호출해 생성
const x = BigInt(Number.MAX_VALUE) + 3n;
x //17976931348623157081452742373170435679807056752584…144723168738177180919299881250404026184124858371n
String
문자열
ex)
x = "foo bar"
x // foo bar
Symbol
인스턴스가 고유하고 불변인 데이터 형
객체 속성을 추가할 때 고유한 키를 부여하여 다른 코드와 충돌하지 않도록 할 때 많이 쓰임
ex)
const x = Symbol("foo);
typeof x // "symbol"
2) 객체 object
여러 프로퍼티와 메소드를 하나로 묶어놓은 것
ex)
var student = {
name: 'Gaeun Kim',
mobile: '010-1111-0101'
};
student // { name: 'Gaeun Kim', mobile: '010-1111-0101'};
3) 배열 array
자바스크립트에서 배열은 타입이 고정되어 있지 않음, 같은 배열에 있는 요소끼리의 타입이 서로 다를 수 있음
ex)
var arr = [1, "string", true];
arr // (3) [1, 'string', true]
arr.push(2)
arr // (4) [1, 'string', true, 2]
arr[arr.length] = 3
arr // (5) [1, 'string', true, 2, 3]
*배열 객체 함수는 따로 다룰 예정
4) 함수 function
자바스크립트에서는 함수도 하나의 타입임
배열에 함수 할당 가능
ex)
function func1(arg){
console.log(arg);
}
*함수는 따로 자세히 다룰 예정
변수 스코프
블록 레벨 스코프
코드 블록 내에서만 참조 가능한 범위, 코드 블록 내에서 선언한 변수는 지역 변수
함수 레벨 스코프
함수 코드 블록 내에서만 참조 가능한 범위, 함수 내에서만 유효함,
함수 내부에서 선언한 변수는 지역 변수, 외부에서 선언한 변수는 모두 전역 변수
ex)
var foo = 100;
console.log(foo); //100
{
var = 123;
}
console.log(foo) //123
변수 선언
var
범위: 함수 스코프 사용
값 재할당 가능, 재선언 가능
ex)
var tmp = 1;
{
var tmp = 2;
console.log(tmp); //2
}
console.log(tmp); //2
function fn(){
var tmp = 3;
console.log(tmp) //3
}
console.log(tmp) //2
let
범위: 함수/블록 스코프 사용
값 재할당 가능, 재선언 불가능
ex)
let x = 1;
{
let x = 2;
console.log(x); //2
}
console.log(x); //1
const
범위: 함수 스코프
값 재할당 불가능, 재선언 불가능
ex)
const foo = 1;
foo = 2 // Uncaught TypeError: Assignment to constant variable
'프로그래밍 > 개발지식' 카테고리의 다른 글
[JavaScript] Event 인터페이스 (0) | 2023.11.10 |
---|---|
[JavaScript]JS Function 함수 (0) | 2023.10.04 |
API의 개념과 종류 (2) | 2023.09.26 |
웹 스토리지(Web Storage), 쿠키(Cookie) (0) | 2023.07.29 |
DAO/DTO (0) | 2022.12.10 |