SW/JavaScript
JavaScript 기초 문법
ahhyeon
2023. 2. 27. 16:47
1. 자바스크립트란?
HTML과 CSS로 만들어진 웹페이지를 동적으로 변경해주는 언어
모든 웹 서버는 HTML + CSS + JavaScript
console
> 띄어놓은 페이지에서 빠르게 자바스크립트를 테스트 할 수 있음
단, 새로고침하면 모두 사라짐!
• [크롬 개발자 도구] 를 열어서 , console 탭에 작성
• 마우스 오른쪽 클릭 ㅡ> 검사 ㅡ> console
• 윈도우 : F12
• 맥 : alt(option) + command + i
2. 코드구조
여러개의 구문은 세미콜론을 기준으로 구분함
alert('Hello'); alert('World');
3. 변수
→ 변수는 값을 저장하는 박스
→ 키워드를 이용해 선언
- let - 중복 선언 불가능, 재할당 가
- const - 중복 선언 불가능, 재할당 불가
- var - 중복 선언 가능
3-1. 변수명
let first_name = 'ahyeon' // snake case
let firstName = 'ahyeon' // camel case
# 쉽게 알아볼 수 있게 쓰는게 중요!
# 특수기호는 $와 _만 사용할 수 있음
# 띄어쓰기는 불가능
3-2. 자료형
자바스크립트는 8가지 기본 자료형을 지원
- Number : 정수와 부동 소수점을 저장
- BigInt : 아주 큰 숫자를 저장
- String : 문자열을 저장
- boolean : 논리값 true / false을 저장
- null : '비어있음', '존재하지 않음'을 나타내는 null값(독립 자료형)
- undefined : 값이 할당되지 않은 상태를 나타내는 undefined값(독립 자료형)
- symbol : 복잡한 자료구조를 저장하는데 쓰이는 객체형과 고유한 식별자를 만들 때 사용
typeof 연산자는 값의 자료형을 반환
let age = 10;
// undefined 출력
typeof age;
// "number" 숫자형 출력
let input = prompt("숫자를 입력해주세요", "숫자");
alert(typeof(input));
// 무슨 타입인지 알아보기 위해 쳐본 코드
// 숫자형이 나와야하는데 타입이 string으로 나옴
// why? prompt()는 사용자로부터 입력 받으면 숫자로 리턴하는게 아님!
// prompt()를 통해서 입력을 받으면 string타입으로 됨.
int numType = Number(input);
// Number(input)은 자바에서 생성자호출
// Number()를 통해서 Stirng을 숫자로 바꿈
alert(typeof(numType));
alert(numType); // NaN(Not a Number) 숫자가 될 수 없는 것을 뜻[ex. 가나다]
4. 상호작용
host 환경이 브라우저인 경우, UI함수를 이용해 사용자와 상호작용할 수 있다.
alert ()
➡️ 이 함수가 실행되면 '확인(OK)' 버튼을 누를 때 까지 메세지를 보여주는 창이 계속 떠있음
alert("Hello");
prompt()
➡️ 브라우저에서 제공하는 prompt 함수는 두개의 인수를 받음
➡️ 함수가 실행되면 텍스트 메시지와 input 필드, 확인 및 취소 버튼이 있는 모달창을 띄어줌.
result = prompt(title, [default]);
# title : 사용자에게 보여줄 문자열
# default : 입력 필드의 초기값(선택값)
💡 대괄호[...]의 의미는?
→ default를 감싸는 대괄호는 이 매개변수가 필수가 아닌 선택값이라는 것!
prompt 함수는 사용자가 input 필드에 기재한 문자열을 반환하고, 사용자가 입력을 취소한 경우 null이 반환.
let year = prompt('년도를 입력하세요.', 2023);
alert(`해당 년도는 ${year}년 입니다.`); // 해당 년도는 2023년입니다.
confirm()
➡️ 매개변수로 받은 question과 확인 및 취소 버튼이 있는 모달창을 보여줌.
result = confirm(question);
➡️ 사용자가 확인 버튼을 누르면 true, 그 외는 false를 반환
let result = confirm("좋아요 클릭 하시겠습니까?");
alert(result); // 확인 버튼 누르면 true 출력
5. 리스트 & 딕셔너리
5-1. 리스트
순서를 지켜서 가지고 있는 형태
# 리스트를 선언
let a_list = []
let b_list = [1,2,'bye',3]
b_list[0] // 1
b_list[2] // 'bye'
# 리스트에 요소 넣기
b_list.push('good')
b_list // [1, 2, "hey", 3, "good"]
# 리스트의 길이 구하기
b_list.length // 5
5-2. 딕셔너리
키(key) - 벨류(value) 값의 묶음
# 딕셔너리 선언
let a_dict = {}
let b_dict = {'name':'cookie','age':20}
b_dict['name'] // 'cookie'
b_dict['age'] // 20
b_dict['height'] = 160 // 딕셔너리에 key:value 넣기
b_dict // {name: "cookie", age: 20, height: 160}
5-3. 리스트와 딕셔너리 조합
names = [{'name':'cookie','age':20},{'name':'peanut','age':29}]
// names[0]['name']의 값은? 'cookie'
// names[1]['name']의 값은? 'peanut'
new_name = {'name':'jelly','age':14}
names.push(new_name)
// names의 값은? [{'name':'cookie','age':20},{'name':'peanut','age':29},{'name':'jelly','age':14}]
# names[2]['name']의 값은? 'jelly'
6. 함수
# 만들기
function 함수이름(필요한 변수들) {
내릴 명령들을 순차적으로 작성
}
# 사용하기
함수이름(필요한 변수들);
6-1. 연산자
window.onload = function() {
let list = ""; // String 타입
let num = 10; // Number 타입
// 복합대입 연산자를 통하여 list 변수에 문자열 누적
list += "<ul>";
list += " <li>안녕</li>";
list += " <li>자바스크립트</li>";
list += "</ul>";
// 정수형도 복합대입연산을 통해서 값을 누적시킴
num += 10; num += 10;
num += 10; num += 10;
// 문서에 출력
document.body.innerHTML = list;
document.body.innerHTML = num; // 누적했기 때문 바뀌는 것
let num = 10;
# 증감연산자 사용
alert(num++); // 후위 증가연산자(;이 끝난 후 증가됨 -> 11)
alert(++num); // 전위 증가연산자(;이 끝나기 전에 이미 증가됨 -> 12)
alert(num++); // 13
document.write(num);
7. 조건문
7-1. if문
# 짝수 확인
let value = window.prompt("숫자를 입력하세요.");
alert(typeof(value));
// prompt()에서 받은 value 값은 string 타입
// 아래코드는 parseInt()를 통해서 string 타입을 정수타입으로 강제형변환
parseInt(value);
alert(typeof(value));
if(value % 2 == 0) {
alert("짝수입니다.");
}
else {
alert("홀수입니다.");
}
# 논리 연산자 사용
# 01. 2와 8의 공배수
let value = window.prompt("숫자를 입력하세요.");
value = parseInt(value);
// && 논리 연산자로써 두개의 조건이 true이면 true를 리턴
if((value % 2 == 0) && (value % 8 == 0)) {
alert("2와 8의 공배수입니다.");
}
else {
alert("2와 8의 공배수가 아닙니다.);
# 02. 2이거나 8의 배수
let value = window.prompt("숫자를 입력하세요.");
value = parseInt(value);
// ||는 논리 연산자로써 둘 중의 하나의 조건만 true이면 true를 리턴
if((value % 2 == 0) || (value % 8 == 0)) {
alert("2이거나 8의 배수입니다.");
}
else {
alert("2이거나 8의 배수가 아닙니다.");
}
// 사용자로부터 입력받는 부분
let value = window.prompt("해당번호를 고르세요.");
// 값 비교
// cpu의 참조를 적게 받고자 함(if-else if-else 구문)
if(value == "1") {
document.write("당첨! 아이폰 14 pro");
}
else if(value == "2") {
document.write("당첨! 에어팟 pro2");
}
else if(value =="3") {
document.write("당첨! 보스 헤드셋");
}
else {
document.write("꽝!")
}
8. 반복문
8-1. for문
# 초기화 > 비교(조건식) > 실행문(싱글루프) > 증감식
# *을 일렬로 출력
for(let i=1; i<=10; i++) {
document.write("*");
}
# string 배열을 선언과 동시에 초기화
# 배열은 인덱스로 관리해서 값을 수정할때도 인덱스를 사용해야함.
# 단, 배열의 인덱스는 0부터 시작
// document.write(data[0]); 일일히 출력하는 것보단 반복문을 사용하는게 보기 좋음
// for(let i=0l i<7; i++) {
// document.write(data[i] + "<br>");
// }
let data = ["서울", "인천", "경기", "대구", "부산", "강원도", "제주"]
# 배열명.length는 배열의 길이를 구해줌!
document.write("data배열의 길이 : " + data.length + "<br>");
for(let i = 0; i<data.length; i++) {
document.write(data[i] + "<br>");
}
# 01. 구구단
// 사용자로부터 입력받는 부분
let dan = prompt("몇 단을 출력할 까요?");
// string -> number 강제형변환
data = parseInt(dan);
for(let i=1; i<=9; i++) {
document.write(dan + "*" + i + "=" + (dan+i) + "<br>");
}
# 02. 구구단(중첩반복문)
// 외부루프의 초기값은 반드시 1번만 초기화
for(let i=2; i<=9; i++) {
document.write("<div>");
document.write("<h3>" + i + "단</h3>");
// 내부루프의 초기값은 외부루프가 도는 만큼 초기화
for(let j=1; j<=9; j++) {
document.write(i + "*" + j + "=" + (i*j) + "<br/>");
}
document.write("</div>");
}
8-2. switch문
switch문은 정형화, 한정된 데이터에 가독성을 좋게 하고자 한다면 써도 좋음.
// 사용자로부터 입력받는 부분
let rank = window.prompt("직급을 입력하세요. 1-부장, 2-차장,3-과장,4-대리,5-사원");
switch(job) {
case "1" : document.write("<p>부장의 급여는 <strong> 700만원 </strong>입니다.");
break; // break문이 없으면 입력한 부분아래에 있는 내용을 다 출력함
case "2" : document.write("<p>차장의 급여는 <strong> 600만원 </strong>입니다.");
break;
case "3" : document.write("<p>과장의 급여는 <strong> 500만원 </strong>입니다.");
break;
case "4" : document.write("<p>대리의 급여는 <strong> 350만원 </strong>입니다.");
break;
case "5" : document.write("<p>사원의 급여는 <strong> 200만원 </strong>입니다.");
break;
// default는 옵션임
default : alert("잘못 입력하셨습니다.");
}