HTML index 내에 선언해 주는 경우
.js 파일을 분리 생성해서 HTML에 연결 해 준다.
document 객체의 write() 메서드를 사용하여 출력한다.
JAVA의 System.out.print();와 같은 동작을 한다.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>document 객체</title>
<script>
document.write("환영합니다");
//document 객체는
//window 객체의 하부객체 이다.
//document 겍체가 HTML 태그를 관장한다.
//DOM : Document Object Model
//document 객체롤 제어할 수 있는 현태가 만들어진 것.
//DOM Tree : DOM이 Tree형태로 구성된 것
document.write("환영합니다","<br>");
//document 객체의 write 메소드를 이용하여 데이터를 문서에 출력한다.
//출력문 뒤 "<br>"을 이용해 줄바꿈 해준다.
</script>
</head>
<body>
</body>
</html>

window 객체의 하부 객체에 DOM인 document객체가 있으므로
window 객체가 없으면 document 객체는 아무 역할도 할 수 없다.
마찬가지로 BOM객체과 javaScript 객체또한 window 객체가 있어야 한다.
데이터 타입을 지정해 주지 않고 var로 선언한다.
자동으로 데이터 타입이 정해진다.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>변수 지정</title>
<script>
var num1 = 10;
//var - variable : 변수
//자바의 int num = 10; 과 같은 형태
var num2 = 3.14;
//자동으로 실수형으로 선언된다.(int, double 등 필요X)
document.write(num1,"<br>"); //10출력
document.write(num2,"<br>"); //3.14출력
</script>
</head>
<body>
</body>
</html>
출력문 안에 서로 다른 데이터 타입을 출력할때는
'+'로 자동 형변환 시켜서 붙여준다.
<script>
document.write("hello" + "world");
//문자열 끼리 + >>(concat, 접합)
document.write("hello: " + 20 , "<br>")
//문자열 + 정수
//피연산자의 불일치
//연산자: +
//피연산자: "hello", 20
//연산 당하는 데이터들의 타입이 일치하지 않음.
//+ 연산자가 자동으로 형변환을 해 준다.
//String + int >> String형
//int + double >> double형
</script>
이는 자바에서 print문에 +를 붙여주는 것과 같은 역할이다.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>prompt</title>
<script>
//prompt: 입력 창 생성해서 값을 입력 받는다.
//숫자를 입력해도 String형으로 받기 때문에 연산을 위해서는 형변환이 필요하다
var num1 = prompt('숫자1 입력') //"10"
var num2 = prompt('숫자2 입력') //"20"
var result = (num1 + num2) //"10" + "20"
document.write(result, "<br>") //"1020"
//prompt로 받은 숫자는 String타입으로 받기 때문에
//정수형 계산은 불가능, 강제 형변환 해줘야 한다.
var num1 = parseInt(num1) //10
var num2 = parseInt(num2) //20
var result = (num1 + num2) //10 + 20
document.write(result, "<br>") //30
//parse - 구문분석
//parseInt, parseFloat, JASON.parse, queryStirng.parse 등이 있다
</script>
</head>
<body>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>confirm</title>
<script>
var result = confirm("계속 하시겠습니까?")
document.write(result, "<br>")
//확인 누르면 true, 취소 누르면 false 반환
//if문등을 사용해 다음 동작 적용 가능
alert(result) //경고 표시
console.log(result) //콘솔 내부 출력(F12)
</script>
</head>
<body>
</body>
</html>
확인을 누르면 True, 취소를 누르면 False 반환
alert(경고창)을 통해 결과값을 확인창 형태로 출력 가능
키보드의 숫자 1 옆(탭키 위)에 있는 특수문자인 백틱(backtick)을 사용하면 ${ } 사이에 변수나 연산을 삽입할 수 있다.
함수의 기본 형태
function을 사용해 함수를 정의해 준다.
함수 실행 후 다시 되돌아와 다시 반복되는 함수
함수 내에 해당 함수를 다시 호출하는 형태가 특징이다.
외부에서 최소한 최초1회의 호출이 필요하다(호출 없이 함수 단독으로 실행 불가능)
3! (3factorial) 계산
setTimeout(호출할함수, 지연시간) 지연시간 후 함수 호출 1회 실행
setInterval(호출할함수, 지연시간) 지연시간 후 함수호출 무한 반복지연시간은 msec 단위(1000msec = 1sec)
<script>
//배열에서 바로 다중 요소를 선언하는 경우
var arr1=[[10,20,30],[40,50,60]]
var arr2=[
[10,20,30],
[40,50,60]
]
//배열의 출력
for(var i=0; i<=1; i++){ //행변화
for(var j=0; j<=2; j++){//열변화
document.write(arr2[i][j]+" ")
}
document.write("<br>")
}
//1차원 배열에 1차원 배열을 추가하는 경우
var arr3 = [[10,20,30]]
var arr4 = [40, 50, 60]
arr3.push(arr4)//push를 사용해 원 배열에 공간을 만들어주며 요소 추가
//원배열에 원소 추가 하는 경우
var arr5 = new Array(0)
var element = null
var row = 2 //행
var col = 3 //열
for(var i=1; i<=row; i++){
element = new Array(0)
for(var j=1; j<=col; j++){
element.push(10) //element에 10 원소 추가
}//element=[10, 10, 10]
arr5.push(element)
element = null //원소 초기화
//초기화가 되지 않으면 [10, 10, 10] 뒤에 계속 추가됨
}
</script>
자바스크립트 내에 내장되어 있는 객체를 불러와 사용할 수 있다.
<script>
var date = new Date()
//Date 객체 생성
//자바 스크립트의 내부 객체
var year = date.getFullYear()
var month = date.getMonth()+1
var day = date.getDate()
var hour = date.getHours()
var min = date.getMinutes()
var sec = date.getSeconds()
var format = year + "-" + month + "-" + day
format += " " + hour + ":" + min + ":" + sec + ""
console.log(format) //현재 날짜+시간 출력
</script>
현재 날짜와 시간 출력
<script>
var audio = new Audio()
var i=1
audio.src = "./audio/my_piano1.mp3"
//오디오 소스 지정
function next(){
if(i==3){
i=1
}else{
i++
}
audio.src = "./audio/my_piano" + i +".mp3"
start()
}
function pre(){
if(i>1){
i--
}else{
i=3
}
audio.src = "./audio/my_piano" + i +".mp3"
start()
}
function start(){
// alert(audio.duration) //오디오 길이 초단위로 출력
audio.play() //소스 재생, 내장객체 사용
alert("my_piano" + i +".mp3")
}
function pause(){
audio.pause() //일시정지
}
function stop(){
//정지하는 내부객체는 없으므로
//일시정시 후 시간을 0으로 만들어준다
audio.pause()
audio.currentTime = 0 //시간을 0으로 만들어줌
}
</script>
</head>
<body>
<button onclick="start()">시작</button>
<button onclick="pause()">일시정지</button>
<button onclick="stop()">중지</button>
<button onclick="next()">다음곡</button>
<button onclick="pre()">이전곡</button>
</body>
각 버튼을 누르면 지정된 함수가 작동한다
<script>
var str1 = new String("Hello") //String 객체생성 정석
var str2 = "Hello" //String 객체생성 >> 약식으로도 가능
str1.concat(" World")
//concatenate 잇다
document.write(str1, "<br>") //Hello 그대로 출력
var result = str1.concat(" World")
document.write(result, "<br>") //새로운 변수에 저장 후 출력해야 됨
var index = str2.indexOf("e") //특정 문자의 인덱스값
document.write(index, "<br>") ///1
var index = str2.indexOf("llo") //해당 문자열이 시작하는 위치 출력
document.write(index, "<br>") ///2 >> 2 3 4 아님 주의, 시작하는 위치만 출력됨
var myCh = str2.charAt(1) //인덱스 번호에 해당하는 문자 출력
document.write(myCh, "<br>") ///e
document.write(result, "<br>") //Hello World
var editResult = result.replace("Hello", "Hi") //Hello를 Hi로 대체
document.write(editResult, "<br>") ///Hi World
var str3 = new String("Hello world my name")
var result = str3.split(" ") //해당 구분자(여기선 공백)로 문자열을 나눈다
document.write(result, "<br>") ///Hello,world,my,name >> result는 Array
document.write(result[3], "<br>") ///name
var str4 = " Hello " //공백 여러개여도 하나만 들어감
var start = "Hi"
var end = "world"
var result = start + str4 + end //공백이 함께 들어감
document.write(result, "<br>") ///Hi Hello world
var str5 = str4.trim() //양쪽 공백 제거
// str4.trimLeft(), str4.trimRight() //왼쪽/오른쪽 공백 제거
result = start + str5 + end
document.write(result, "<br>") ///HiHelloworld
</script>
<script>
var num1 = new Number(3) //Number 객체 생성
var num2 = 3 //약식으로 생성 가능
// num2.toString() //String으로 변환
document.write(typeof(num1), "<br>") //object
document.write(typeof(num1.toString()), "<br>") //string
var num3 = 3.141592
var result = num3.toFixed(3) //반올림, 소수점 3번째 자리까지 표현
document.write(result, "<br>") //3.142
</script>
https://momentjs.com/
사이트에 접속 하면 현재 날짜, 시간 을 얻을 수 있는 라이브러리가 존재한다.
라이브러리 주소
https://momentjs.com/downloads/moment.js
를 직접 링크하여 사용할 수 있다.
라이브러리 서버의 상태나 인터넷 연결 상태에 영향을 받는 방식이다.
<script src="https://momentjs.com/downloads/moment.js"></script>
<!-- 외부의 라이브러리 주소를 가져오는 경우 -->
<!-- 인터넷/서버에 문제가 생기면 사용할 수 없다. -->
<script>
console.log(moment().format("YYYY-MM-DD hh:mm:ss"))
//시간은 소문자로
console.log(moment().format("YYYY-MMM-DD hh:mm:ss"))
//월이 영문약어(Jan등)으로 나옴
console.log(moment().format("YYYY-MMMM-DD hh:mm:ss"))
//월이 영문표기(January)로 나옴
//YYYY 대신 YY를 사용하면 2023 대신 23이 나옴
</script>
라이브러리를 다운받거나 복사한 다음, js파일로 만들어 연결할 수 있다.
서버나 인터넷의 상태에 영향을 받지 않는다.
링크 연결 보다는 js파일 연결이 안정성과 범용성이 우수하다.
<script src="./script/moment.js"></script>
<!-- 라이브러리를 js파일로 저장하고 연결하는 경우 -->
<!-- 인터넷/서버의 영향을 받지 않는다 -->
<script>
console.log(moment().format("YYYY-MM-DD hh:mm:ss"))
//시간은 소문자로
console.log(moment().format("YYYY-MMM-DD hh:mm:ss"))
//월이 영문약어(Jan등)으로 나옴
console.log(moment().format("YYYY-MMMM-DD hh:mm:ss"))
//월이 영문표기(January)로 나옴
//YYYY 대신 YY를 사용하면 2023 대신 23이 나옴
</script>
<script>
//JSON
//JavaScript Object Notation
//Key-value 쌍
//파이썬의 딕셔너리, 자바의 해시맵과 같은 역할
var person = {name:"Kim", age:20, height:180.2}
document.write(person.name, "<br>") //key: name, value: "Kim"
document.write(person.age, "<br>") //key: age, value: 20
document.write(person.height, "<br>") //key: height, value: 180.2
//JSON Array
var personList = [
{name:"Kim", age:20, height: 180.2},
{name:"Lee", age:24, height: 167.5},
{name:"Park", age:21, height: 178.6}
]
//배열이기 때문에 push로 값 추가 가능
personList.push({name:"Choi", age:27, height: 160.8})
var inputName = prompt("name")
var inputAge = prompt("age")
inputAge = parseInt(inputAge)
var inputHeight = prompt("height")
inputHeight = parseFloat(inputHeight)
personList.push({name:inputName, age:inputAge, height:inputHeight})
console.log(personList) //2차 배열로 저장
for(var i=0; i<personList.length; i++){
document.write(personList[i].name, "<br>") //i번째 배열의 key의 value
document.write(personList[i].age, "<br>")
document.write(personList[i].height, "<br><br>")
}
</script>