-
자바스크립트 데이터 타입, 연산자 정리Web/자바스크립트 2019. 7. 17. 20:42
자바스크립트의 기본 타입 : 숫자, 문자열, 불린값, null , undefined
기본적으로 느슨한 타입 체크 언어. var라는 한 가지 키워드로만 변수를 선언한 후 어떤 타입의 데이터라도 저장 가능.
자바스크립트 기본타입
숫자
하나의 숫자형만 존재한다. 자바스크립트는 모든 숫자를 64비트 부동 소수점 형태로 저장한다.
ex ) var intNum = 10과 var floatNum = 0.1의 typeof 연산자 결과값이 모두 number 타입
문자열
''나 ""로 생성. C언어의 char타입과 같은 데이터 타입은 존재하지 않는다. 한개의 문자는 길이가 1인 문자열을 사용하자.
한 번 정의된 문자열은 변하지 않는다. 한번 생성된 문자열은 읽기만 가능하고 수정은 불가능.
불린값
null과 undefined
undefined는 타입이자, 값을 나타낸다. 아무런 값이 할당되지 않는 것은 null 타입이다 . ( 값이 비어있음 )
자바스크립트 참조 타입
숫자 문자열 불린값 null defined 같은 기본 타입을 제외한 모든 값은 객체다.
( 배열 , 함수, 정규표현식 등 모두 객체 )
자바스크립트에서 객체는 key value 형태의 컨테이너로서 해시 자료구조와 상당히 유사하다.
참조 타입인 객체는 여러 개의 프로퍼티들을 포함할 수 있고 기본 타입의 값을 포함하거나 다른 객체를 가리킬 수도 있다.
자바스크립트 에서의 객체 생성?
자바와 같이 클래스를 정의하는 과정이 없다. 3가지 생성 방법
1. 기본 제공 Object() 객체 생성자 함수 이용
var temp = new Object();
temp.name = "빽빽이";
temp.gender = "남자";
2. 객체 리터럴 이용.
리터럴이란 ? 표기법.
var temp = {
name : "빽빽이",
gender : "남자"
};
3. 생성자 함수 이용
객체 프로퍼티(속성)에 접근하려면 대괄호 표기법, 마침표 표기법이 있다.
(프로퍼티란? 속성이다. 아래 예시에서는 name과 gender가 속성이되고 만약 속성으로 함수가 들어온다면 메소드가 된다
속성(프로퍼티): 값
속성(메소드) : 함수 )
var temp = {
name : '빽빽이',
gender : '남자"
};
console.log(temp.name); // 마침표 표기법
console.log(temp['name']); // 대괄호 표기법
temp.age = 30; // 마침표 표기법으로 동적 생성, or temp['age'] = 30 대괄호 표기법으로 동적 생성
console.log(temp.age); // 30 출력
표현식의 경우 대괄호 표기법만을 써주자.
ex ) temp['full-name'] = "빽빽이"; temp.full-name = ' 빽빽이'; x
4. for in 문을 통한 객체 프로퍼티 출력 가능하다.
5. 객체 프로퍼티 삭제
delete 연산자는 객체의 프로퍼티만 삭제할 뿐, 객체 자체를 삭제하지는 못한다.
참조 타입의 특성
자바스크립트에서는 기본 타입인 숫자, 문자열, 불린값, null, undefined 5가지를 제외한 모든 값은 객체다.
객체는 참조 타입이고 모든 연산은 실제 값이 아닌 참조값으로 처리된다.
프로토타입
자바스크립트의 모든 객체는 자신의 부모 역할을 하는 객체와 연결되어 있다. 즉 모든 객체는 자신의 프로토타입을 가리키는 [[Prototype]]이라는 숨겨진 프로퍼티를 가진다.
리터럴 방식으로 생성된 객체의 경우 Object.prototype 객체가 프로토타입 객체가 된다.
객체를 생성할 때 결정된 프로토타입 객체는 임의의 다른 객체로 변경하는 것도 가능하다. 즉 부모 객체를 동적으로 바꿀 수 있음. (상속 등)
배열
배열 리터럴은 대괄호([])를 사용한다.
배열에 length 프로퍼티는 배열 내에 가장 큰 인덱스에 1을 더한 값이다. 배열 원소의 가장 큰 인덱스가 변했을 경우만 변경된다.
자바스크립트 엔진은 [] 연산자 내에 숫자가 사용될 경우, 해당 숫자를 자동으로 문자열 형태로 바꿔준다.
객체의 프로토타입과 배열에 프로토타입을 정리해보자.
객체 : Object.prototype 객체가 부모 프로토타입이다.
배열 : Array.prototype 객체가 부모 프로토타입이다, 배열은 Array.prototype에 포함된 배열 표준 메서드와 Object.prototype의 표준 메서드들을 모두 사용할 수 있다.
배열에 delete 연산자는 해당 요소의 값을 undefined로 설정할 뿐 원소 자체를 삭제하지는 않는다. 보통 배열에서 요소들을 완전히 삭제할 경우 자바스크립트에서는 splice() 배열 메서드를 사용한다.
Array() 생성자 함수
- 호출할 때 인자가 1개이고 숫자일 경우 : 호출된 인자를 length로 갖는 빈 배열 생성
ex ) var foo = new Array(3) // [undefined, undefined, undefined]
-그외의 경우 : 호출된 인자를 요소로 갖는 배열 생성
ex) var bar = new Array(1,2,3); // [1,2,3]
유사 배열 객체는 배열 표준 메서드를 활용할 수 있다.
숫자와 문자열 등은 기본 타입이지만, 이들을 위해 정의된 표준 메서드들은 객체처럼 호출할 수 있다.
ex) console.log("test".charAt(2));
연산자
+연산자 : 두 연산자가 모두 숫자일 경우에만 더하기 연산, 나머지는 문자열 연결 연산
typeof 연산자 : 피연산자의 타입을 문자열 형태로 리턴
null -> 'object' 배열 -> 'object' 함수 -> 'function'
== 연산자와 === 연산자
==연산자는 비교하려는 피연산자의 타입이 다를 경우 타입 변환후 비교
=== 연산자는 피연산자의 타입이 다를 경우 타입을 변경하지 않고 비교
!!연산자 : 피연산자를 불린값으로 변환
!!0 -> false, !!'' -> false, !!{} -> true
(객체는 비어있어도 true 변환 주의하자)
* 송형주, 고현준님의 인사이드 자바스크립트를 보고 원활한 공부를 위하여 정라해보았다.
'Web > 자바스크립트' 카테고리의 다른 글
실행 컨텍스트 (0) 2019.08.05 함수와 프로토타입 체이닝 (0) 2019.07.23