console.log("10"+"70"); //1070
console.log("10"-"5"); //5
console.log("10"*"5");//50
console.log("10"/"5");//2
console.log("10"%"5");//0
console.log(1+true);//2
정말 연산이 된다! 다만 +연산자는 문자열이 연산자/피연산자인 경우에는 연산자/피연산자를 문자열로 바꿔 연결시킨다.
+) + 연산자 사용시 연산자와 피연산자가 모두 문자열이 아닐 경우 (1+true)에는 숫자로 변환되기도 한다.
var num = 7;
console.log(++num); //num+1 후 num 출력 8
console.log(--num); //num-1 후 num 출력 6
console.log(num++);
//num 출력 후 num+1 출력되는 값은 7이지만 다음 줄에 console.log(num)하면 8
console.log(num--); //num 출력 후 num-1 7
연산의 순서를 잘 생각하기~!
console.log(10==10); //true 값이 같고 데이터 타입은 달라도 ㄱㅊ
console.log(10!='10') //false 값이 같고 데이터 타입은 달라도 ㄱㅊ
console.log(10==="10") //false 값과 데이터 타입이 모두 같아야 함
console.log(10!=='10') //true 값과 데이터타입이 모두 같아야 false
비교연산자는 가볍게 정리만 했다.
!=는 데이터 타입은 달라도 괜찮지만 값은 같아야 한다.
헷갈리니 ==에서 =하나를 !로 바꿨다고 생각하자. !===는 없다.
console.log('3'==3 && 3==='3'); //&&:둘 중 하나라도 false이면 false.
console.log('7'==7|| 3!=3); //||(OR):둘 중 하나만 true여도 true.
삼항 조건 연산자
삼항 조건 연산자는 조건식의 평가 결과에 따라 반환할 값을 결정한다.
var n=1;
n > -10 ? 'pass':'fail'
쉼표 연산자
쉼표 연산자는 왼쪽 피연산자부터 차례대로 피연산자를 평가함.
var a,b,c;
a=1,b=2,c=3
if ( 조건1 ) {
실행할 명령
}
else if( 조건2 ){
조건1이 거짓이고 조건2가 참일 경우 실행할 명령
}
else{
조건 1과 2가 모두 거짓인 경우(만족하지 않을 경우) 실행할 명령
}
조건문은 위와 같은 형태로 사용한다.
var a=50;
var b=90;
if (a!==b){
if(a>b){
console.log('a가 b보다 크다.');
else {
console.log('a가 b보다 작다.');
else{
console.log('a와 b는 같다.');
중첩 if문까지~
for (var i=0;i<7;i++){
console.log(i);
}
var a=0;
while (a<7){
console.log(a);
a++ //++a면 마지막에 출력되는게 7이 됨. 먼저 +1하고 출력하니까!
}
var num=0;
do{
console.log(num);
num++;}
while(num>7)
for문은 (초기화한 변수값; 조건;증감표시){ 조건이 참일 경우 실행할 명령 }
while문은 while ( 조건 ) {조건이 참일 경우 실행할 명령 }
do while문은 do{ 조건이 참일 경우 실행할 명령} while(조건);
do while문은 while의 조건이 아래에 있기 때문에 do의 명령을 무조건 실행부터 한다.
while문과 do while문 사용시에는 변수를 따로 선언해줘야 한다!
Switch문
var x=2;
var rank
switch(x){
case 1: rank='First';
case 2: rank='Second';
case 3: rank='Third';
case 4: rank='Fourth';
case 5: rank='Fifth';
default: rank='Out of ranking';
}
console.log(rank);
위 코드는 Second가 출력되어야 할 것 같지만 Out of ranking이 출력된다. Switch문은 break를 넣어주지 않으면 계속 반복되어 default값이 출력되기 때문이다.
var x=2;
var rank
switch(x){
case 1: rank='First';
break;
case 2: rank='Second';
break;
case 3: rank='Third';
break;
case 4: rank='Fourth';
break;
case 5: rank='Fifth';
break;
default: rank='Out of ranking';
}
console.log(rank);
이제 정상적으로 Second가 출력된다.
함수 리터럴 (값)
함수는 함수 리터럴로 생성할 수 있다.
var func=function add(x,y){ return x+y;}
함수는 객체지만 호출할 수 있다.
콜백함수
function repeat(n, f) {
for (var i = 0; i < n; i++) {
f(i); // i를 전달하면서 f를 호출
}
}
var logAll = function (i) {
console.log(i);
};
// 반복 호출할 함수를 인수로 전달한다.
repeat(5, logAll); // 0 1 2 3 4
위에서 logAll은 콜백함수!
실습문제에 입력 받는 게 있어서 prompt로 하려니 에러가 났다. 질문하니 prompt 함수는 브라우저에서 사용할 수 있는 함수이며 Node.js 환경에서는 prompt 대신 readline 모듈을 이용해야 한다고 한다.
모듈
프로그램은 작고 단순한 것에서 크고 복잡한 것으로 진화한다. 그 과정에서 코드의 재활용성을 높이고, 유지보수를 쉽게 할 수 있는 다양한 기법들이 사용된다. 그 중의 하나가 코드를 여러개의 파일로 분리하는 것이다. 이를 통해서 얻을 수 있는 효과는 아래와 같다.
모듈의 장점
순수한 자바스크립트에서는 모듈(module)이라는 개념이 분명하게 존재하지는 않는다. 하지만 자바스크립트가 구동되는 호스트 환경에 따라서 서로 다른 모듈화 방법이 제공되고 있다.
readline
const readline =require('readline');
1.readline 모듈 불러오기
아직 Node.js를 배우지 않아 코드를 보이는 대로만 해석했다. Node.js의 require 함수로 'readline' 모듈을 가지고 오고, 상수 readline에 해당 모듈을 저장한다. 값이 모듈 전체이기 때문에 변수보다는 상수로 지정하는 것 같다.
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
2.인터페이스 생성하기
readline 모듈의 create메서드를 사용하는 것 같다. input프로퍼티로는 process.stdin,output 프로퍼티로는 process.stdout을 준다. process.stdin과 stdout은 표준 입력 데이터를 읽고 출력하기 위해 사용되는 Node.js의 내장 stream이다. 이 값 역시 바뀌면 안 되는 값이기에 상수로 지정한다.
rl.on("line", (line) => {
/*입력받는 값을 처리하는 코드*/
rl.close();
});
rl.on("close", () => {
/*입력이 끝나고 실행할 코드*/
process.exit();
});
3.입출력을 처리하는 코드 작성하기
'line'과 'close'는 readline의 이벤트라고 한다...
Node.js를 공부해야 할 것 같다...