Data type은 programming을 하면서 data를 제대로 연산하기 위해서 형태를 제대로 이해하고 있어야 한다.
Javascript 내 data type 은 boolean, string, number, null, undefined, object, array, function이 존재하고 ES6에서 새로 추가된 symbol이 있다.
const bool = true;
const bool = false;
const str = '1';
const not_str = 1
str === not_str // false
가장 이해하기 쉬웠던 number type과 string type 비교
function test(num) {
let result = num + 2;
return result;
}
test(str); // '12';
test(not_str); // 3;
str과 not_str은 모두 1을 나타내고 있지만 data type에서는 '' 구문으로 string과 number로 명확하게 구분되어 진다.
2를 더해주는 함수를 만들어 차이를 비교해보면 number type은 일반적인 수학 연산과 같이 이루어지지만 string type과 연산을 실행하면 2도 string type으로 변환하여 연산되어 진다.
위에서 알수 있는 사실
undefined
: 값이 할당되지 않은 변수를 호출하면 undefined가 반환된다.
Null
: undefined와는 다르게 의도적으로 변수의 값을 비울때 null로 표기할 수 있다.
key로 연결된 value의 집합이 될 수도 있고 index(정수의 key)를 가진 value의 집합이 될 수 있다. function도 object로 분류 된다.
let obj = {
key: 'value',
key2: 'value2',
.
.
.
};
/**
object에서 새로운 key를 생성하고 값을 할당할 때 [],
bracket notation 또는 ., dot notation을 사용한다.
**/
/** bracket notation []로 key를 구분하지만 key를 참조하는
변수가 선언되어 있지 않으면 string으로 표기해야 한다. **/
obj['key']; // 'value'
obj[key]; // ReferenceError key is not defined
let key = obj['key'];
obj[key] // 'value'
// dot notation은 객체 안의 key를 그대로 받아들인다.
let key2 = 'different value'
obj.key2; // 'value2'
/**
array는 가장 앞의 value부터 0부터 시작하는 index를 가진다.
**/
let arr = [value, value2, ...value];
// array의 값은 arr[index]로 가져올 수 있다.
arr[0]; // value
arr[1]; // value2
/**
function은 어떠한 data를 가공할 때 사용한다.
함수 선언식(function declaration)과
함수 표현식(function expression)으로 선언할 수 있다.
**/
let str = '1';
function test_func(data_value) {
let result = Number(data_value);
return result;
}
test_func(str); // 1
let test_func = function (data_value) {
let result = Number(data_value);
return result;
}
test_func(str); // 1
두 함수 선언 모두 같은 결과 값을 반환하지만 함수선언과 함수표현은 code parsing하는데 다른 차이점이 있다.
Reference
https://developer.mozilla.org/ko/docs/Web/JavaScript/Data_structures
https://developer.mozilla.org/ko/docs/Glossary/Primitive
https://d2fault.github.io/2018/02/28/20180228-javascript-number-type/
https://ko.wikipedia.org/wiki/NaN