- 자바스크립트는 느슨한 타입 언어 혹은 동적 타입 언어로 변수의 자료형을 명시적으로 선언할 필요가 없는 언어이다.
- 연산자로 인한 계산이나 변수에 전달되는 값은 자동으로 암묵적 형 변환 수행한다.
- 강제적 형 변환을 위해서는 자료형 함수를 이용해 명시적 형 변환을 수행한다.
1) 묵시적 형 변환
2) 명시적 형 변환
- 연산자는 프로그램에서 데이터를 처리하여 결과를 산출할 목적으로 사용되는 문자이다.
- 연산의 대상 값은 피연산자라고 하며, 피 연산자의 개수에 따라 단항/이항/삼항 연산자의 종류로 존재한다.
1) 산술 연산자
2) 대입 연산자
3) 복합 대입 연산자
4) 증가, 감소 연산자
5) 비교 연산자
6) 논리 연산자
7) 삼항 연산자
변수 혹은 상수에 접근할 수 있는 범위를 뜻한다.
모듈/함수 내 코드에서 동일한 변수 사용 시 간섭을 줄이는 용도로 사용한다.
scope는 global scope와 local scope의 타입으로 구분한다.global scope : 전역에 선언되어 어디에서든 접근 가능
local scope(block, function level scope) : 특정 지역에 선언되어, 해당 지역 내에서만 접근 가능
아래의 코드로 scope에 대해 알아보자.
// global scope
let num_1 = 1;
let num_2 = 2;
// local scope(function scope)
function testFunc() {
let num_3 = 7;
num_1 = 3;
num_2 = 5;
}
num_3 = 8;
local scope 중 block scope에서 let과 const는 블록안에서 선언 시 밖에서 사용을 못하지만 var는 사용이 가능하다.
// local scope(block scope)
{
var str = '30'
let stri = '50'
const strin = '60'
}
console.log(str)
console.log(stri)
console.log(strin)
위와 같은 코드를 작성했을 때 testFunc 함수에서는 num_1과 num_2의 값을 변경할 수 있다. 그 이유는 num_1과 num_2는 전역 변수이기 때문이다. 하지만 num_3는 testFunc함수에서 선언한 지역변수이기 때문에 testFunc안에서만 사용하거나 변경할 수 있고 그 이외에 지역에서는 사용과 변경이 불가능하다.
이런 지역을 Scope라고 말한다.
1) if-else
const test = (param) => {
if(param > 4){
console.log(`${param}은 4보다 큽니다.`);
}else if(param < 2){
console.log(`${param}은 2보다 작습니다.`);
}else{
console.log(`${param}은 2보단 크고 4보다 작습니다.);
}
}
test(5);
2) switch
const test = (param) => {
switch(param){
case 1:
console.log("param은 1입니다.");
break;
case 2:
console.log("param은 2입니다.);
break;
case 3:
console.log("param은 3입니다.");
break;
default:
console.log("param은 3보다 큰 수입니다.");
break;
}
}
만약 case마다 break를 사용하지 않으면 case 조건에 맞더라도 다음 case로 이동한다. 즉, 멈추지 않는다.
const test = (param) => {
switch(param){
case 1:
console.log("param은 1입니다.");
case 2:
console.log("param은 2입니다.);
case 3:
console.log("param은 3입니다.");
break;
default:
console.log("param은 3보다 큰 수입니다.");
break;
}
}
이렇게 되면 case 1에서 출력되는 console.log와 case 2에서 출력되는 console.log가 무조건 출력하게 된다.
1) for
for( 선언문 ; 조건문 ; 증감문 ){
// 작성할 코드
}
for( let i=0; i<10; i++){
console.log(i); // output: 1,2,3,4,5,6,7,8,9
}
2) while
let i = 0;
while(i < 10){
console.log(i);
i++;
}
3) do~while
무슨뜻인지 코드로 알아보자.
let i = 6;
do{
console.log("i");
}while(i<5)
원래의 while문이였으면 console.log를 아예 한번도 실행하지 않았을 것이다. 하지만 do~while문은 do 안에 내용을 한번 무조건 실행하고 그 다음 조건을 확인한다. 따라서, 조건은 i < 5라 조건에 충족하지는 않지만 한번은 무조건 실행한다.
4) for .. in
const arr = ["apple", "banana", "cute"];
const obj = {
name : "cho",
age : 100,
city : seoul,
}
for(let key in arr){
console.log(key) // output : 0, 1, 2
}
for(let key of obj){
console.log(key) // output : name, age, city
}
5) for .. of
const arr = ["apple", "banana", "cute"];
for(let key of arr){
console.log(key) // output : apple, banana, cute
}
1) break
2) continue
3) label
a:for(let i=0; i<5; i++){
for(let j=0; j<4; j++){
console.log(j);
}
if(i == 3){
break a;
}
}
위의 코드처럼 작성하면 원래는 0 1 2 3이 5번 출력 반복하여 출력이 되어야하는데, 첫번째 for문에 a라는 label을 붙였기 때문에 i가 3이 되면 첫번째 for문이 break가 되면서 3번 반복만 된다.