본 내용은 해당 강의 토대로 작성
variable
rw(read/write)
- 읽고 쓰기가 가능한 것
- 값을 할당 변경
- let
Constant
r(read only)
- 읽기만 가능
- 다른 값으로 바꾸기 불가능
- const(Constant)
Primitive vs. Object
- Primitive: 값 자체가 메모리에 저장
- Object: 메모리에 저장되지 않고 reference를 가리킴(포인터)
- reference는 실제로 object가 담겨있는 메모리를 가리킴
- const로 선언한 경우, 포인터가 잠기지만 object는 변경이 가능
Immutable vs. Mutable
- Immutable: 데이터 자체를 바꿀 수 없음
- primitive types, frozen objects
primitive의 경우, 특정한 문자열을 정의하면 그 문자열을 통째로 메모리를 올린 후 다른 문자열로 변경이 가능하지만 문자열의 일부를 다른 것으로 변경하거나 데이터 자체를 변경하는 것은 불가능하다.
- Mutable: objects, array
Operator
String concatenation
- +를 이용하여 문자열끼리 합치기 가능
- 문자열에 숫자를 더하면, 숫자가 문자열 취급되어 합해진다.
- 백틱(`)을 사용하면 변수와 문자열을 유연하게 사용할 수 있다.
- 줄바꿈, 특수 기호도 인식이 가능
console.log('my' + ' cat');
console.log('1' + 2);
console.log(`string literals: 1 + 2 = ${1 + 2}`);
Numeric operators
- **+, -, /, *, %, ****: 덧셈, 뺄셈, 나누기, 곱셈, 나머지, 제곱
Increment and decrement operators
- ++: 증가
- 앞에 쓰면 preincrement 먼저 더하고, 뒤에 쓰면 postincrement 나중에 더한다.
- --도 동일
let x = 3;
let y = ++x;
console.log(y) // 4
let z = y++;
console.log(z) // 4
Assignmenrt operators
- =: 할당
- Numeric operators와 같이 사용할 수 있다.
let x = 3;
x += 1
Comparison operators
- 비교 연산자
- <, <=",">, >=</,>
Logical operators
- || (or)
- 하나라도 true면, true
- 가장 앞이 true이면, 더이상 뒤의 연산을 진행하지 않는다.
- 그러므로 함수로 호출되거나 많은 연산이 실행되어야 나오게되는 boolean은 제일 뒤에 두는 것이 좋다.
- && (and)
- 모든 것이 true이어야 true
- 가장 앞이 false이면, 더이상 뒤의 연산을 진행하지 않는다.
- 그러므로 함수로 호출되거나 많은 연산이 실행되어야 나오게되는 boolean은 제일 뒤에 두는 것이 좋다.
- null check에 활용
- ! (not)
- boolean을 반대로
Equlity
- ==, != : loose equality
- 타입을 변환하여 비교한다.
- ===, !==: strict equality
- 타입을 변환하지 않고 비교한다.
- strict를 사용하는 것을 권장
const stringNum = '1';
const pureNum = 1;
console.log(stringNum == pureNum); // true
console.log(stringNum != pureNum); // false
console.log(stringNum === pureNum); // false
console.log(stringNum !== pureNum); // true
- object의 경우
- 같은 값이 입력되어 있어도, 각각 다른 reference를 가르키고 있다.
const cat1 = { name: 'siru'};
const cat2 = { name: 'siru'};
const cat3 = cat1;
console.log(cat1 == cat2); // 다른 ref, false
console.log(cat1 === cat2); // 다른 ref, false
console.log(cat1 === cat3); // 같은 ref, true
- 다양한 예시
console.log(0 == false); // true
console.log(0 === false); // false
console.log('' == false); // true
console.log('' === false); // false
console.log(null == undefined); // true
console.log(null === undefined); // false
Conditional operators
if, else if, else
- if: true이면 block의 명령어를 실행
- else if: if가 아닌경우 넘어와서 실행
- else:if, else if 모두 아닐 때 실행
Ternary operator
- 값을 할당하거나 간단하게 데이터를 출력시 간단하게 사용
const name = 'siru';
console.log(name === 'jm'? 'yes' : 'no');
- nesting을 남발하면 가독성이 좋지 않다.
- if, switch를 사용
switch
- 변수의 값에 따라서 명령을 실행
const browser = 'IE';
switch (browser) {
case 'IE':
console.log('bad');
break;
case 'Chrome':
case 'Firefox':
console.log('good');
break;
}
Loops
while
- statement가 false가 나올 때 까지 반복
let i = 3;
while (i > 0){
console.log(`while: ${i}`);
i--;
}
do-while loop
- block을 먼저 실행 후 조건을 확인
let i = 3;
do {
console.log(`do while: ${i}`);
i--;
} while (i > 0);
for loop
- begin, condition, step을 주고 반복문 실행
- begin의 변수는 지역변수
for (let i = 3; i > 0; i = i - 2){
console.log(`inline variable for: ${i}`);
}
nested loop
- loop를 중첩하여 사용할 수 있다.
- 아래의 경우 O(n2)이므로 cpu에 좋지 않다. 되도록 지양할 것.
for (let i = 0; i < 10; i++){
for (let j = 0; j < 10, j++){
console.log(`i: ${i}, j: ${j}`);
}
}
break, continue
- break: loop을 완전히 끝냄
- contiunue: 한번 skip하고 loop 진행
Comment
Primitive와 object의 개념은 확실히 알겠지만, mutable, immutable의 개념은 아직 잘 모르겠다. 왜 primitive가 immutable인지 이해가 안된다. 추후 강의에 설명을 해주신다니까 더 들어봐야겠다.
loop에서 do-while을 완전히 잊고 있었다. 프로젝트를 진행했을 때, 사용했다면 유용했을 법한데 잘 기억해두고 나중에 실전에서도 써먹어봐야겠다.
'programming study > JavaScript' 카테고리의 다른 글
[드림코딩 by 엘리] JavaScript 기초 강의(5) (ES5+) (0) | 2021.06.08 |
---|---|
[드림코딩 by 엘리] JavaScript 기초 강의(4) (ES5+) (0) | 2021.06.08 |
[드림코딩 by 엘리] JavaScript 기초 강의(2) (ES5+) (0) | 2021.06.05 |
[드림코딩 by 엘리] JavaScript 기초 강의(1) (ES5+) (0) | 2021.06.04 |
JavaScript 노트 (02) (0) | 2021.02.27 |