원시자료형(Primitive) 은 변수 할당시 메모리에는 변수이름과 값이 각각 할당됩니다
타입종류는String,Number,Boolean,Undefined,Null,Synbol,Bigint등이 있습니다
원시자료형은하나의 정보만 담고 있으며, 다른 변수에 재할당할 경우 참조가 되는 것이 아닌 값이 복사가 됩니다
let a = 'string'; // string
a = 1234 ; // number
Infinity, -Infinity, NaN 같은 특수 숙자 값도 포함됩니다 let a = 1 / 0; // Infinity
let b = "Hello" / 2 + 5 ; // NaN
n 을 붙이면 만들 수 있습니다 const bigInt = 123456789n;
console.log(typeof bingInt); // bigint;
const a = 'rockbell89';
const b = "hello";
const c = `hello!, ${name}`;
true 와 false 값을 나타내며, 논리연산자의 피연산자로 주로 사용됩니다let checkTrue = true;
let checkFalse = false;
let isGreater = 4 > 1; // true
let age = null;
let age;
console.log(typeof age); // undefined
참조자료형(Reference) 는 배열,객체 등 데이터가 복잡하기때문에 heep 이라는 별도의 공간을 마련하여, 메모리에는 변수이름과 해당 hepp을 참조하는 주소값을 할당합니다
타입종류는Array,Object,Function등이 있습니다
참조자료형은 값이아닌 주소 값을 저장하고 있기때문에 다른 변수에 할당하게 되면 같은 주소를 참조하게 되고, 해당 변수의 내부 값을 변경하게되면 같이 변경되게 됩니다
let x = { nickname : 'rockbell89', age: 34 }
let y = x;
y.age = 20;
console.log(x.age); // 20
let x = { nickname : 'rockbell89', age: 34 }
let y = x;
y = 20;
console.log(x.age);// 34
console.log(y); // 20
let user = {nickname: 'rockbell89'};
function changeNickname(user) {
user.nickname = 'bongbong89'
}
changeNickname(user);
console.log(user.nickname); // bongbong89
let age = 30;
function changeAge(value) {
value = 20;
console.log(value); // 20 - 매개변수로 넘겨받은 인자의 값
}
changeAge(age);
console.log(age); // 30
변수에 접근할 수 있는 범위
{ } 중괄호로 둘러싼 범위 ()=>{} 화살표 함수로 둘러싼 범위 (함수스코프와 다르게 블록스코프로 취급) var 키워드는 블록 스코프를 무시하고 함수스코프를 따릅니다 - 화살표함수 예외var키워드는 블록 스코프 기준을 무시하므로, let 키워드 사용 권장if(true) {
var nickname = 'ria'
}
console.log(nickname); // ria
if(true){
let nickname = 'ria'
}
console.log(nickname); // ReferenceError
function showName() {
var nickname = 'ria';
}
console.log(nickname); // ReferenceError
함수밖에서 선언된 변수의 이름과 같은 이름의 변수를 사용하는 경우
함수밖의 변수는 잠시 가려집니다
함수안에서 해당 변수를 사용, 함수 밖의 변수 값은 변하지 않습니다
만약, 값이 유지되어야 하는경우 함수 안에서 선언키워드(var, let, const)를 이용해야합니다.
let nickname = 'rockbell89';
function showNickname(nickname) {
nickname = 'bongbong89'
console.log(nickname); // 2) bongbong89
}
console.log(nickname); // 1) rockbell89
showNickname();
console.log(nickname); // 3) bongbong89
let nickname = 'rockbell89';
function showNickname(nickname) {
let nickname = 'bongbong89'
console.log(nickname); // 2) bongbong89
}
console.log(nickname); // 1) rockbell89
showNickname();
console.log(nickname); // 3) rockbell89
보다 엄격한 parsing 및 error handling 을 시행하도록 적용