💡 연산자에 대해서 공부해보자!
// 변수를 선언하고, 값을 할당한 다음에
let name = 'yewon';
// 값을 변경 가능하다.
name = 'jeon yewon';
// 변수는 메모리에 값을 읽고, 쓰기가 가능하기 때문
원시 타입이냐?
, 객체 타입이냐?
에 따라서 메모리에 값이 다른 방식으로 저장됨const yewon
이라고 선언하고, 객체를 할당하게 되면, yewon
이 가르키고 있는 곳에는 reference가 있어서 (reference는 실제로 객체가 있는 곳을 가리키고 있는 곳이다.) 이 reference를 통해서 실제로 object가 담겨있는 메모리를 가르키게 된다. 그래서 const yewon
이라고 선언하게 되면 yewon
이 가리키고 있는 포인터만 잠겨서 yewon
이 다른 오브젝트로 변경이 불가능하지만 yewon
의 이름과 나이는 계속 변경이 가능하다.Immutable data types
과 Mutable data types
2가지가 존재한다.Immutable data types
: 데이터 타입을 절대 변경하지 못하는 것 -> 원시 타입의 한 종류인 string만 봐도 string 타입의 값인 'yewon'
의 e
를 뺀다고 해서 다른 타입으로 변하는 것이 아니다. 또한 object.freeze()
메서드를 사용한 객체도 immutable data type
이다.Mutable data types
: object는 변경이 가능한 데이터 타입이다. object는 데이터 타입을 계속해서 변경이 가능하다. arrary
는 Mutable data types
이다.(다른 언어에서는 mutable arrary
, immutable arrary
나누는 경우도 있음)console.log('my'+'cat'); // 문자열 + 문자열
console.log('1'+2); // 문자열 + 숫자 = 문자열
console.log(`string literals :
'''''
1 + 2 = ${1 + 2}`); // Template literals 방식
Template literals
방식을 사용하면 좋은점이 줄바꿈을 해도, 특수기호인 single quote
를 써도 콘솔창에 그대로 문자열로 변환되서 출력이된다.
single quote
를 사용하면 중간에 또 다른 single quote
가 들어가면 인식이 되지 않는다.
✏️ 백슬러쉬(\
)를 이용하면 된다.
\n
: 줄 바꿈
\t
: tab키
console.log('ellie\'s \tbook');
console.log("ellie's \nbook");
console.log(`ellie's book`);
console.log(1+1); // add
console.log(1-1); // substract
console.log(1/1); // divide
console.log(1*1); // multiply
console.log(5%2); // remainder
console.log(2**3); // exponentiation
let counter = 2;
const preIncrement = ++counter;
// counter = counter + 1;
// preIncrement = counter;
console.log(`preIncrement : ${preIncrement}, counter : ${counter} `);
const postIncrement = counter++;
// postIncrement = counter;
// counter = counter + 1;
console.log(`postIncrement : ${preIncrement}, counter : ${counter} `);
let x = 3;
let y = 6;
console.log((x += y)); // x = x+y 라는 의미
console.log((x -= y)); // x = x-y
console.log((x *= y)); // x = x * y
console.log((x /= y)); // x = x / y
console.log(10 < 6); // less than
console.log(10 <= 6); // less than or equal
console.log(10 > 6); // greater than
console.log(10 >= 6); // greater than or equal
const value1 = false;
const value2 = 4 < 2; // false
function check() {
for (let i = 0; i < 10; i++) {
// wasting time
console.log('🥳');
}
return true;
}
// check()는 true를 반환함
console.log(`or : ${value1 || value2 || check()}`); // true
false || false || true
는 true
이다.or
연산자는 처음으로 true
가 나오면 거기서 멈춘다.or
연산자는 하나라도 true
라면 무조건 true
이기 때문이다.check()
함수까지 실행된다.value1
이 true
면 check()
함수는 실행하지 않는다.console.log(`and : ${value1 && value2 && check()}`); // false
false
면 그냥 다 false
뒤에 것들이 실행이 안되는 것을 확인해볼 수 있다.&&
는 null
체크할 때도 많이 사용된다.null
은 false
이기 때문에 // nullableObject && nullableObject.something
if (nullableObject != null) {
nullableObject.something;
}
nullableObject
가 null
이 아닐 때만 뒤에 있는 .something
을 가져올 수 있다.console.log(!value1); // true
const stringFive = '5';
const numberFive = 5;
console.log(stringFive == numberFive); // true
console.log(stringFive != numberFive); // false
string 5
와 number 5
는 같다고 나온다.console.log(stringFive === numberFive); // false
console.log(stringFive !== numberFive); // true
string 5
와 number 5
는 타입이 다르기 때문에 다르다고 나온다.const ellie1 = { name: 'ellie' };
const ellie2 = { name: 'ellie' };
const ellie3 = ellie1;
object
는 메모리에 탑재될 때 reference
형태로 메모리에 탑재된다.ellie1
과 ellie2
에는 똑같은 데이터가 들어 있는 오브젝트지만, 실제 메모리에서는 1과 2에는 다른 reference가 들어있고, 다른 reference은 서로 다른 object를 가리키고 있다.ellie3
에는 ellie1
이 할당되어 있다. 그니까 둘이 똑같은 reference를 가지고 있다고 할 수 있다.console.log(ellie1 == ellie2); // 1. false
console.log(ellie1 === ellie2); // 2. false
console.log(ellie1 === ellie3); // 3. true
ellie1
과 ellie2
는 각각 다른 reference가 저장되어있다. 둘은 같지 않다.ellie1
이 가지고 있는 reference value를 3으로 할당했기 때문에 참이다. ellie1
과 ellie3
은 똑같은 reference를 가지고 있다고 할 수 있다.🎨 QUIZ
console.log(0 == false);
// true
console.log(0 === false);
// 0은 boolean type이 아님 -> false
console.log('' == false);
// true
console.log('' === false);
// false empty문자열은 boolean type 아님
console.log(null == undefined);
// true
console.log(null === undefined);
// false 둘의 타입은 다른 타입임
➕ 추가로 공부할 것
1. object.freeze() 메서드 알아보기!
2. object reference에 대해 찾아보기!