이 부분은 $1과 $2 그리고 $3를 하이픈(-)으로 연결했다. 그렇다면 $1과 $2, $3는 뭘까? 앞에 괄호와 연결된다 콤마(,)앞에 식을 자세히보면 (/()()()/,”$1-$2-$3”); 이렇게 볼 수 있다. 괄호안의 연산된 값이 순서대로 $1, $2, $3에 대입된다고 보면 된다.
([0-9]{4})
뒤의 괄호부터 차근차근 풀어보자 0에서부터 9까지의 숫자중에 4개의 숫자를 가지겠다는 의미이다
([0-9] * )
0에서부터 9까지의 숫자중에 모든 남는 숫자를 가지겠다는 의미이다 여기서 남는 숫자란, 총 11자리중에 앞에서 3자리, 뒤에서 4자리를 가져간다면 그 나머지숫자은 4개를 가져가겠다는 의미이다.
(^02.{0}|^01.{1}|^[0-9]{3}) ^은 정규식을 시작한다는 의미이다.
{0} 는 02로 시작할경우, .{0}는 문자하나를 출력하겠다는 의미이고 뒤에 오는 숫자를 쓰지않고 02만 출력된다 |는 or연산자역할이다. ^01.{1}는 01로 시작할경우, .{1}는 01 이후로 오는 1자리까지 숫자를 출력하겠다는 의미이고 여기서는 01x가 된다. [0-9]{3}는 0부터 9까지 숫자중에서 입력된 3가지 숫자를 가지겠다는 의미이다.
//참고로 today는 2020년 6월 12일이다. let today = newDate(); document.write(today+"<br>")
let day = newDate(2020,0,1); //month숫자를 0에서부터 세기때문에 1월1일은 0,1이 되어야함 document.write(day+"<br>")
let day1 = newDate(2020,1,1); //2월1일 document.write(day1+"<br>")
let day2 = newDate(2020,0,1,11,30,5); //년,월,일,시,분,초 지정해서 객체사용가능 document.write(day2+"<br>")
let day3 = newDate(2020,0,1,11,61,5); //분에 61분을 적으면 자동으로 1시간이 올라감 document.write(day3+"<br>")
let day4 = newDate("2020/1/1") //년,월,일만 가능. 시분초불가. 월을 나타낼때 0부터가 아니라 1부터 시작 document.write(day4+"<br>")
// 출력값 순서대로 Fri Jun 12202011:14:44 GMT+0900 (대한민국 표준시) Wed Jan 01202000:00:00 GMT+0900 (대한민국 표준시) Sat Feb 01202000:00:00 GMT+0900 (대한민국 표준시) Wed Jan 01202011:30:05 GMT+0900 (대한민국 표준시) Wed Jan 01202012:01:05 GMT+0900 (대한민국 표준시) Wed Jan 01202000:00:00 GMT+0900 (대한민국 표준시)
변수에 저장한 date객체를 가져와서 사용해보자 요일출력하는 getDay()의 경우 0(일)부터 6(토)까지를 나타낸다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
//참고로 today는 2020년 6월 12일이다. let today = newDate();
자바스크립트는 객체기반의 언어 객체는 기능, 속성을 포함하고 있는 것 추상화된 객체를 사용할때 속성은 변수를 사용해서 표현하고 기능은 함수(매서드)를 사용해서 표현한다 자바스트립트에서는 객체를 직접 만들어쓰지않고 만들어진 객체를 활용한다 하지만 자바는 자주 직접 만들어서 사용한다
1 2 3
let phone = new Object(); //여기서 phone은 참조변수 phone.모델명 = "아이폰" phone.on(); //전원켜는 기능 실행
수학 : Math 객체 => Math.floor(버림), Math.round(반올림), Math.ceil(올림), Math.max(여러값비교해서 최대값), Math.min(여러값비교해서 최소값), Math.abs(절대값), Math.random(0부터 1사이에 있는 실수를 랜덤하게 출력)
위에서 num을 0이하로 입력했다면 alert창 띄우고 다시 숫자를 입력하도록 하게 하고싶었다. 근데 이 로직으로는 감이 잡히지않았다. 고민하다가 if와 for문의 자리를 바꿨다. 자리만 바꿨을 뿐인데 reload가 가능해서 굳이 새로고침하지않아도 다시 num을 입력할 수 있어 편하다
loginbtn.addEventListener('click', ()=>{ let id = document.getElementById('id').value; let pw = document.getElementById('pw').value; console.log(id, pw)
자바는 서버에서 사용되는 언어이다. 서버에서 처리를 한 후 돌려줘야 한다. 반면 JS는 서버가 아닌 클라이언트에서 처리된다. 그래서 서버의 부담이 줄어든다
그렇다면 전부 JS로 하면 안될까??
하지만 JS에 한계가 있기 때문에 서버의 언어와 클라이언트의 언어를 같이 사용하게 된 것이다.
6. JS 사용시 주의점
항상 대/소문자 구문해서 사용한다. 아래 코드는 같은 의미를 가지고 있는 것 같지만 출력값은 다르게 출력된다
1 2
newDate(); New DATE();
실행문을 끝낼때 항상 ;을 사용한다. 세미콜론이 없이 실행가능할 수 있지만 실행중에 문제가 발생할 수도 있기에 붙이는 것을 권장한다
사용자(개발자)의 편의성을 위해 한 줄에 하나의 문장을 작성한다.
큰 따옴표와 작은 따음펴 사용에 주의한다
자바의 경우, ""는 String만 가능, ''는 char만 가능
js의 경우, 구분없이 다 사용가능하고 항상 짝으로 사용하면 된다.
1 2
// ex) document.write('안녕하세요 |'js|'입니다')
마우스를 사용할 수 없는 환경에 대한 고려를 해야한다.(키보드 접근성 준수)
7. 변수
변수란 무엇일까? 하나의 공간에 하나의 데이터만 저장하는 공간(메모리)이다
만약 하나의 공간에 다른 데이터를 추가적으로 넣게되다면? 새로운 데이터가 들어올 시 기존 데이터에 덮어쓰여지게 된다.
저번시간에 꼭 기억해야하는 한 문장이 있다고 했다 바로 모든 프로그램은 주기억장치에서만 실행된다!
변수의 종류는 크게 아래와 같다
문자형데이터(String) : 문자 또는 숫자를 (“”)(‘’)표현한 데이터.
만약 document.write(‘100’+200+300)이라면 출력값은 어떻게 될까?
100500이라고 답했다면 땡! 정답은 100200300이다.
숫자형(Number) : 변수에 숫자만 저장되는 데이터.
논리형(Boolean)
Null : 비워진 데이터 값
변수를 사용하기 위해서는 아래와 같이 세 가지의 동작이 필요하다
변수를 선언
변수를 초기화
변수를 사용
다만 경우에 따라서는 1번 선언과 2번 초기화를 같이 진행할 수도 있다. - 변수 선언만 한 경우 : var 변수명; - 선언과 초기화 같이 하는 경우 : var 변수명 = 값;
8. 변수 선언 후 초기화를 안한다면?
아래를 출력하면 언디파인드가 뜨는데 consol창에는 아무메세지도 나타나지않는다 즉 에러가 아니다
1 2 3 4 5 6
let tmp document.write(tmp);
//출력값은 undefined
왜 이런 현상이 일어날까?
메모리가 할당된 tem안에 값이 없기때문에?
땡!
tem안에 값이 있는지 없는지 모르기때문에!
이게 무슨 양자역학같은 소리냐면…
메모리는 유한하다. 8기가나 16기가 등등. 컴퓨터는 여러 작업을 하면서 한정된 메모리안에서 데이터를 썼다가 지웠다가를 반복한다. 재사용된 메모리위치에 아직 쓰레기값이 들어있을 수도 있다. 내가 대입하지 않았더라도 어떤 쓰레기값이 들어가 있을수있기때문에 undefined가 나온 것이다. 따라서 변수선언 후에는 항상 초기화를 해줘야된다.
9. 객체타입
var타입은 객체타입이라고 한다. 모든 타입을 저장할 수 있다. 비교하자면, java의 변수선언은 정수인 경우 int num = 1이라고 하지만 js는 데이터타입을 정의하지않고 변수를 선언할 수 있다.