자료형이란?
<숫자형>
console.log(7%3) -> 7을 3으로 나누고 나머지를 출력하세요!console.log(2 ** 3) -> 2의 3제곱을 출력하세요!<문자열>
console.log('hello" + 'kim') 을 하면 hellokim이 출력console.log('3' + '5') 를 하면 35가 출력-> 이거 코드 짜다보면 은근히 헷갈린다. 잘 살펴봅시다
<불 대수>
명제란? -> 참, 거짓이 확실한 문장이다.x AND y -> x와 y가 모두 참일때만 참이다.x OR y -> x와 y가 둘다 거짓일때만 거짓이고, 한 개라도 참이면 참이다.NOT -> 반대로 해준다.<불린형(Boolean)>
&&로 표시한다.|| 로 표시한다.! 로 표시한다.!! 이렇게하면 반대의 반대가 나온다.-> false 리턴-> false 리턴-> false 리턴비교연산자
=== 과 == 의 차이점은?
-> 조금 더 엄격한 비교를 할 때 ===, 조금 덜 엄격한 비교를 할 때 == 를 사용합니다.
console.log(2 == "2")는 숫자 2와 문자 2는 같은 것이라 판단하여 true를 반환합니다.console.log(2 === "2")는 숫자 2와 문자 2가 완전 같은지 판단하여 false를 반환합니다.<typeof 연산자>
typeof '값' 을 입력하면 이 값을 평가해서 해당하는 자료형을 문자열로 돌려준다.
console.log(typeof 101)
-> number가 출력된다.
자바스크립트는 정수와 소수를 따로 구분하지 않으므로 1이나 1.0 둘다 number를 출력한다.
ex)
let name = "lee" function sayHello(){ console.log('Hello") } console.log(typeof name); console.log(typeof sayHello);
-> string과 function이 출력된다.
연산식을 넣으면
console.log(typeof 'hello' + 'lee')
console.log(typeof 8-3)
-> stringlee 와 NaN이 출력된다.
NaN은 not a number
왜 NaN이 나와?
-> typeof는 사칙연산보다 우선순위가 높다.
typeof 8은 문자열인데 문자열에 -3을 하니깐 NaN이 나온다.
그래서 괄호로 연산을 우선순위로 만들어주면 된다.
연산자 우선순위
기본적으로 사칙연산, 괄호 등 우리가 아는 우선순위를 사용하지만,
더 많은 연산자로 범위를 넓혀보면 우선순위가 엄청 많다.
연산자 우선순위 참고:
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Operators/Operator_precedence
형 변환(Type Conversion)
console.log('10' + '5') -> 105가 출력console.log(Number('10') + Number('5')) -> 15가 출력true,false로 변환console.log(typeof('4' +3)) -> string 이 출력된다.관계비교(<, >, <=, >=)
console.log('two' >= 1) 처럼 NaN과 1의 비교가 불가능 한 경우에도 false를 출력한다.같음 비교 연산(===, !==, ==, !=)
3개 사용은 일치, 불일치(엄격한 비교)
-> 형변환 없이 본래의 자료형으로 비교가 진행된다.
2개사용은 동등, 부등(느슨한 비교)
-> 숫자로 형변환이 일어나서 비교가 진행된다.
ex)
1 === 1; // true (값과 타입 모두 동일)
1 === '1'; // false (값은 같지만 타입이 다름)
1 == '1'; // true (값은 같고, 타입 변환 후 비교)
===을 사용하는 것이 의도하지 않은 형 변환을 피하고 더 안전하게 비교를 할 수 있는 방법인 것 같다.
느슨한 비교는 잘 사용하지 않았던 것 같다.
<템플릿 문자열>
백틱을 굉장히 많이 사용했던 것 같다. 탬플릿 문자열을 사용하면 문자열 내에 변수를 쉽게 삽입할 수 있고, 여러 줄로 문자열을 작성할 수도 있다.
<null과 undefined>
자료형에는 숫자, 문자, 불린 외에도 null과 undefined도 있다.
둘다 '값이 없다' 이지만 조금 다르다.
null은 의도적으로 표현할때 사용하는 값이다.
undefined는 값이 없다는 것을 확인하는 값이다.
ex)
let lee;
console.log(lee);
-> undefined를 출력한다.
선언을 한 다음 값을 정해주지 않았기에 undefined를 출력한다.
하지만 여기에 lee=null;을 추가하면 null이 출력된다.
<할당 연산자>
let x = 5;x = x-2;console.log(x) -> 3 을 리턴<복합 할당 연산자, 증가감소 연산자>
x = x+1;x+=1;x = x+1;x++;<함수의 실행 순서와 return>
dead code라고 하며, 작성하지 않는 것이 좋다.<return과 console.log의 차이>
<옵셔널 파라미터>
undefined를 출력한다.변수이름 = 값으로 기본값을 설정해주는 것인데, 이 순서는 제일 마지막이 좋다. 중간에 들어가면 값이 밀려버린다.<변수의 scope>
scope는 범위, 영역이라는 뜻인데,
변수에는 사실 유효한 범위가 있어서 범위를 벗어나면 오류를 발생한다.
function 함수 () {
// 블록문(block Statement = 중괄호로 감싼 부분)
let x = 3;
// 로컬 변수, 지역변수 => 블록문안에서만 쓸수있는 변수
console.log(x);
//여기서는 3이 출력
}
함수();
console.log(x);
여기서는 에러가 발생하는데, 변수 x가 유효하지않은 곳에서 사용했기때문!
근데 위 예제에서 변수 x를 함수 밖에서 선언한다면?
둘다 잘 출력된다.
왜? 전역(글로벌)변수로 선언했기때문이다.
함수안에서는 로컬변수가 있는지 확인하고 없다면 글로벌 변수를 확인한다.
<상수>
<if문>
if (조건부분) {
동작부분
}
<else if문>
else if 를 사용하세용<switch문>
어떤값을 입력하느냐에 따라 동작(case)이 달라진다.
if문과는 동작하는 방식이 다르다.
switch (비교할 값) {
case 조건값_1:
동작부분:
break;
...
default:
동작부분:
}
- if문은 조건이 복잡하거나 불린 조건을 기반으로 분기할 때 사용한다.
- switch문은 하나의 변수를 여러 값과 비교할 때 사용되며, 명확한 값 비교에 적합하다.
조금 자세하게 보자면,
그렇기 때문에, switch문은 값들을 비교할 때 자료형을 엄격하게 구분한다는 점과 if문으로 대체할 때는 반드시 등호 세 개를 사용해 일치 비교를 해야 한다는 점을 꼭 기억하자!
<for 반복문 - loop statement>
for ( 초기화부분; 조건부분; 추가동작부분) {
동작부분
}
for (let i = 1; i <= 10; ) {
console.log(${i} 너 최고!);
i++;
}
하지만 코드의 목적이나 순서에 따라 충분히 본인의 의도에 맞춰서 사용하면 좋을듯!
let i = 1;
for (; i <= 10; i++) {
console.log(${i} 너 최고!);
}
위 코드 처럼 for 반복문의 로컬 변수를 꼭 활용하지 않고, 반복문 밖에 있는 글로벌 변수를 활용해도 아무런 문제없이 같은 결과를 출력한다.
단, for문의 소괄호 안쪽 가장 첫 번째 세미콜론은 생략할 수 없다. 저 세미콜론은 초기화 부분과, 조건 부분을 구분하는 세미콜론이기 때문에 초기화 부분의 코드를 생략하더라도 세미콜론 만큼은 생략해선 안된다.
for문의 소괄호 안쪽은 반드시 세미콜론 2개가 필요합니다. 그렇지 않으면 실행 오류가 발생합니다..
<while 반복문 - while statement>
while (조건부분) {
동작부분
}