기본 타입(원시 타입)
Number(숫자), String(문자열), boolean(논리값), undefined, null, symbol
원시 타입 데이터는 데이터를 구성하는 가장 기본적인 요소로 불변 값 정의되어있다
숫자(Number)
자바스크립트는 타입이 없으므로 숫자를 모두 64비트 부동소수점으로 표현한다.
특수한 값
Infinity - 무한대 , 전역변수
NaN - 부정값 not a number 전역변수
Number.POSITIVE_INFINITY 플러스 무한대
Number.NEGATIVE_INFINITY 마이너스 무한대
var intNum = 10;
var floatNum = 0.1;
자바스크립트에의 숫자는 부동소숫점으로 처리함에 따라, 정확한 값이 출력되지 않음.
var number1 = 0.1;
var number2 = 0.2;
console.log(number1 + number2); // 0.30000000000000004
console.log(0.3 == (number1 + number2)); // false
문자열(String)
자바스크립의 문자열 길이가 16비트인 뮤니코드 문자(uft-16 코드)를 나열한 것으로 전 세계에서 사용하는 문자를 대부분 표현할 수 있다.
' '," "를 사용하여 표현.
""는 아무것도 포함하지 않는 문자열이라고 하여 빈 문자열이라고 한다.
var singleQuoteStr = 'singQuoteStr';
var doubleQuoteStr = "doubleQuoteStr";
문자열은 문자열의 인덱스를 통해 접근할 수 있다.
var str = 'test';
console.log(string[0]);
// t가 출력;
var str = 'test';
console.log(str[0], str[1], str[2], str[3]);
str[0]='A';
console.log(str);
str = 'ssong';
console.log(str);
한번 정의된 문자열은 변경될 수 없다.
재할당은 가능하지만, index값을 통한 접근변경은 불가능함.
var str = 'test';
str[0] = 'T';
console.log(str) // test;
Boolean
조건식이 참인지 거짓인지 표현하기 위해 사용하는 값입니다.
true(1), false(0)
undefined
값을 아직 할당하지 않은 변수의 값
없는 객체의 프로러티를 읽으려고 시도 했을 때의 값
없는 배열의 요소를 읽으려고 시도했을 때의 값
아무것도 반환하지 않는 함수가 반환하는 값
함수를 호출해을 때 전달받지 못한 인수의 값
코드로 undefined 대입한 것이 아니라 자바스크립트 엔진이 변수를 undefined로 초기화 한것이다.!!!
var emtyVar;
변수명만 선언할 경우에, undefined
undefined과 null은 둘다 빈값이지만, null은 사용자가 명시적으로 선언한 빈값이므로, 값이 들어있다고 볼수 있다.(null)
undefined는 타입이자 값을 나타냄.
typeof(undefined)
null
아무것도 없음을 값으로 표현한 리터럴
주로 프로그램에서 무언가 검색했지만 찾지 못했을 때 아무것도 없음을 전달하기 위한 값으로 사용된다.
var nullVar = null;
null의 경우 typeof의 결과가 null이 아닌 object이다.
var nullVar = null;
console.log(typeof(nullVar)) // object;
console.log(nullVar == null) // true
참조타입
자바스크립트에서 숫자, 문자열, 불린값, null, undefined같은 기본타입을 제외한 모든 값은 객체다.
객체는 단순히 '이름(key) : 값(value)'
형태의 프로퍼티들을 저장하는 컨테이너로서, 컴퓨터 과학 분야에서 해시(Hash)라는 자료구조와 상당히 유사하다.
기본 타입은 하나값만을 가지는데 비해,
참조타입은 객체 는 여러 개의 프로퍼티들을 포함할 수 있다.
객체의 프로퍼티는 기본 타입의 값을 포함하거나 다른 객체를 가리킬 수 있다.
참조하고 있는 원본의 값이 변경될 때, 참조타입의 값도 변경됨.
var str = '텍스트'; // 원시값
var arr_01 = [str]; // 원시값을 참조
arr_01[0] = '텍스트2'; // 원시값을 참조함에 따라서, 원시값이 변경되진 않음.
//------------------------------------------
var arr_02 = [1, 2, 3, 4]; // 참조값
var arr_03 = var_02;
// arr_03은 var_02를 참조
var03[0] = 5;
console.log(arr_02) // [5, 2, 3, 4] 참조에 의해 arr_02의 값이 변경되었음.
프로퍼티의 성질에 따라 프로퍼티는 함수로 포함할 수 있다 이러한 프로퍼티를 메서드라 부른다.
객체(Object)
객체 안에 저장된 값은 바꿀 수 있습니다..
객체 타입의 값을 변수에 대입하면 변수에는 그 객체에 대한 참조(메모리에서의 위치정보)가 할당된다.
객체 생성 방법
//new Object() 생성자 함수 이용
var foo = new Object();
// 객체 프로퍼티 생성
Human.name = 'foo ';
Human.sex = 'female';
//객체 리터럴 방식
var foo2 = {
name: 'foo ',
sex: 'male'
};
var foo3 = function(name, sex) {
this.name = name;
this.sex = sex;
}
var foo3 = new Human3('foo ', 'female');
console.log(foo);
console.log(foo2);
console.log(foo3);
객체 프로퍼티 읽기/쓰기/갱신
var foo = {
name: 'foo',
age : 20
} //리터럴 방식
// 객체 프로퍼티 읽기
console.log(foo.name);
console.log(foo['name']);
// 갱신
foo.age = 30;
console.log(foo.age);
console.log(foo['age']);
//생성
foo.job = 'student';
//대괄호 표기법만 사용해야 할 경우
//접근하고자 하는 프로퍼티가 예약어나 연산자가 있는 표현식일 경우
foo['full-name'] = 'foo bar';
console.log(foo['full-name']);
console.log(foo.full-name); //NaN
배열(Array)
var arr = [];
배열의 선언 방법은 "[]"
배열 안의 값을 가져오려면 인덱스(Index)를 이용함.
Index는 0부터 시작함.
배열이 생성될때 length 메소드가 함께 생성됨.
length는 1부터 시작함.
var arr = [1, 2, 3, 4]
arr[0] // 1;
arr.length // 4;
arr.length = 7;
console.log(arr); // arr = [1, 2, 3, 4, empty, empty x 2];
배열 선언시 length를 먼저 선언할 수 있음 그럴경우, 배열의 길이에 따라서 먼저 생성이 됨. 빈값은 empty값이 출력됨.
생성자 함수를 이용해서 배열을 만들 경우, new Array(3)과 같이 미리 length를 지정할 수 있다.
var arr = new Array(3); // arr.length = 3; , arr = [empty x 5];
배열도 객체이므로, 동적으로 프로퍼티를 생성할 수 있다.
var arr = [1, 2, 3, 4,]
arr.string = 'test'
console.log(arr); // arr = [1, 2, 3, 4, string];
arr[4] = 6;
console.log(arr.length); // 5
arr의 length 프로퍼티는 배열의 가장 큰 인덱스가 변했을 경우에만 변경됨.
배열이 아니지만, length값이 있는 경우 유사배열 객체라고 한다.