자바스크립트는 다른 언어들에 비해 데이터 타입이 유연함 (유연함 - 상황에 따라 변할 수 있음)
총 8가지의 데이터 타입이 있으나 새로 만들어진 2가지는 아직 많이 사용되지 않음
심볼은 코드 내에서 유일한 값을 가진 변수 이름을 만들 때 사용함
const user = Symbol('this is a user');
const user = Symbol('this is a user');
user === 'this is user'; // false
user === 'user'; // false
user === 'Symbol'; // false
user === true; // false
user === false; // false
user === 123; // false
user === 0; // false
user === null; // false
user === undefined; // false
...
const symbolA = Symbol('this is Symbol');
const symbolB = Symbol('this is Symbol');
console.log(symbolA === symbolB); // false
BigInt는 자바스크립트에서 아주 큰 정수(Integer)를 표현하기 위해 등장한 데이터 타입임
2**53 - 1
, 안전한 최소 정수는 -(2**53 - 1)
인데 이 숫자 범위를 초과하는 정숫값을 사용하려고 하면 연산에 미세한 오류가 발생함console.log(9007199254740991 + 1 === 9007199254740991 + 2); // true
console.log(9007199254740991 + 2); /// 9007199254740992
console.log(9007199254740993); /// 9007199254740992
console.log(9007199254740993n); // 9007199254740993n
console.log(BigInt(9007199254740993)); // 9007199254740993
1.5n; // SyntaxError
10n / 6n; // 1n
5n / 2n; // 2n
3n * 2; // TypeError
3n * 2n; // 6n
Number(3n) * 2; // 6
typeof
연산자를 사용해야 함typeof
연산자는 키워드 다음에 공백(띄어쓰기)을 두고 값을 작성해도 되고, 함수를 사용하듯 괄호로 감싸서 사용할 수도 있음typeof 'Codeit'; // string
typeof Symbol(); // symbol
typeof {}; // object
typeof []; // object
typeof true; // boolean
typeof(false); // boolean
typeof(123); // number
typeof(NaN); // number
typeof(456n); // bigint
typeof(undefined); // undefined
typeof null
을 하면 문자열 null
이 리턴되는 게 아니라 문자열 object
가 리턴됨typeof null; // object
function sayHi() {
console.log('Hi!?');
}
typeof sayHi; // function
false
를 리턴하고 Falsy 값을 제외한 모두는 true
를 리턴함console.log(true || false && false); // true
console.log((true || false) && false); // false
console.log('Codeit' || NaN && false); // Codeit
console.log(('Codeit' || NaN) && false); // false
??
(Nullish coalescing operator)??
를 사용해서 null 혹은 undefined 값을 가려내는 연산자const example1 = null ?? 'I'; // I
const example2 = undefined ?? 'love'; // love
const example3 = 'Codeit' ?? 'JavaScript'; // Codeit
console.log(example1, example2, example3); // I love Codeit
??
는 왼편의 값이 null이나 undefined인지 확인하고 OR 연산자||
는 왼편의 값이 falsy인지를 확인하기 때문에 null이나 undefined가 아닌 falsy 값을 활용할 때 결과가 서로 다름const title1 = false || 'codeit';
const title2 = false ?? 'codeit';
console.log(title1); // codeit
console.log(title2); // false
const width1 = 0 || 150;
const width2 = 0 ?? 150;
console.log(width1); // 150
console.log(width2); // 0
ES2015를 기준으로 let
과 const
키워드가 등장했고 이들을 사용하는 것을 권장함
var
: 변수 선언 부분이 끌어 올려져서 변수를 만들기도 전에 사용이 가능함let
, const
: 변수 선언 이전에 접근할 수가 없어서 에러 메세지가 나타남 (ReferenceError 발생)var
: 중복 선언이 가능함let
, const
: 중복 선언이 불가능 해서 같은 이름으로 변수를 선언하려 하면 에러 메세지가 나타남 (SyntaxError 발생)var
: 함수 스코프를 가짐 -> 함수 단위로만 구분 돼서 조건문이나 반복문 안의 변수도 전역 변수로 취급됨let
, const
: 블록 스코프를 가짐 -> 중괄호가 사용되는 부분(코드 블록)을 기준으로 변수의 유효 범위를 구분함