c++ 의 문법과 유사한 부분도 많더라.

//1. String concatenation
console.log('my' + 'cat');
console.log('1' + 2); //string
//줄 바꿈을 해도, 특수기호를 넣어도 인식한다.
console.log(`string literals: 1 + 2
//''"''
= ${1 + 2}`);

//single quotes 를 사용하면 중간에 single quotes 특수기호가 인식되지 않는다.
//\ 백 슬러시로 해결한다.
console.log('use single\' Quotes');

//2. Numeric operator
console.log(1 + 1);
console.log(1 - 1);
console.log(1 / 1);
console.log(1 * 1);
console.log(5 % 3);
console.log(2 ** 3);

//3. Increment and decrement operator
let counter = 2;
const preIncrement = ++counter;
console.log(preIncrement);

const postIncrement = counter++;
console.log(postIncrement);

//4. Assignment operator
let x = 3;
let y = 6;
x += y;
x -= y;
x *= y;
x /= y;

//5. Comparison operator
console.log(10 < 6);
console.log(10 <= 6);
console.log(10 > 6);
console.log(10 >= 6);

//6. Logical operator: || (or), && (and), ! (not)
const value1 = true;
const value2 = 4 < 2;

//0, -0, '', null, undefined, NaN 모두 false이다.
//let num; 이라 하고 값을 할당하지 않으면 indefined 이므로 false 이다.
//or은 하나라도 true면 바로 true를 return 한다.
// tip! 무거운 함수같은 애들을 처음에 둬 버리지 말자. 마지못해 마지막까지 가서 계산하게 하자.
console.log(`or: ${value1 || value2 || check()}`);

//and는 하나라도 false면 바로 false를 return 한다.
console.log(`and: ${value1 && value2 && check()}`);

function check() {
    for(let i = 0; i < 10; i++) {
        console.log('')
    }
    return true;
}

//! (not)
//반대로 값을 바꾼다.
console.log(!value1);

//7. Equality;
const stringFive = '5';
const numberFive = 5;
// == loose equality, with type conversion
//아래와 같은 출력이 true 가 나오는 magic... 형을 신경쓰지 않기때문이다.
console.log(stringFive == numberFive);

// === strict equality, no type conversion
// 형을 신경쓰기 때문에 이는 false가 나온다.
console.log(stringFive === numberFive);

const ellie1 = {name: 'ellie'};
const ellie2 = {name: 'ellie'};
const ellie3 = ellie1;
console.log(ellie1 == ellie2); // false
console.log(ellie1 === ellie2); // false
console.log(ellie1 === ellie3); // true

//equality - puzzler
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

//8. if / else if / else

//9. ternary operator
const name = `malza`;

console.log(name === `malza` ? 'yes' : 'no');

//10. switch

//11. Loops
//12. do while
// block을 먼저 실행하고 싶다면 사용하자

//13. for
//print even number 1 ~ 10
for(let i = 0; i <= 10; i++)
{
    if(i % 2 == 0)
        console.log(`even number : ${i} `);
}

//or

for(let i = 0; i <= 10; i++)
{
    if(i % 2 != 0)
        continue;
    console.log(`even number : ${i} `);
}

//print while
let i = 0;
while(1)
{
    console.log(`number : ${i}`);
    i++;
    if(i == 8) break;
}